時間限制:10000ms
單點時限:1000ms
記憶體限制:256mb
描述小ho:喂不得了啦,那邊便利店的薯片半價了!
小hi:啥?!
小ho:那邊的便利店在打折**啊。
小hi:走走走,趕緊去看看=v=
於是小hi和小ho來到了便利店。
老闆為了**,推出了組合包的形式,將不同數量的各類商品打包成乙個組合,顧客可以選擇組合進行購買。比如2袋薯片,1聽可樂的組合只要5元,而1袋薯片,2聽可樂的組合只要4元。
通過詢問老闆,小hi和小ho知道:一共有n種不同的商品和m種不同的商品組合;每乙個組合的**等於組合內商品售價之和,乙個組合內同一件商品不會超過10件。
小hi:這樣算下來的話,一聽可樂就是1元,而一包薯片是2元。小ho,如果你知道所有的組合情況,你能分別算出每一件商品單獨的**麼?
小ho:當然可以了,這樣的小問題怎麼能難到我呢?
輸入第1行:2個正整數,n,m。表示商品的數量n,組合的數量m。1≤n≤500, n≤m≤2*n
第2..m+1行:n+1個非負整數,第i+1行第j列表示在第i個組合中,商品j的數量a[i][j]。第i+1行第n+1個數表示該組合的售價c[i]。0≤a[i][j]≤10, 0≤c[i]≤10^9
輸出若沒有辦法計算出每個商品單獨的**,輸出"no solutions"
若可能存在多個不同的結果,輸出"many solutions"
若存在唯一可能的結果,輸出n行,每行乙個非負整數,第i行表示第i個商品單獨的售價。資料保證如果存在唯一解,那麼解一定恰好是非負整數解。
樣例輸入
2 2樣例輸出2 1 5
1 2 4
2嚶嚶嚶,線代不好好學很慘的嚶!1
高斯消元嘛,就求對角線方程組,嘛
按照提示一步步寫就好辣:
#include #include #include using namespace std;
const int maxn=520;
const int maxm=1020;
const double eps=1e-6;
int n,m;
double matrix[maxm][maxn];
int gauss()
swap(matrix[i],matrix[p]);
//以上**進行行交換將對角線上的matrix[i][i]設為i行下絕對值最大的
//若仍然無法使matrix[i][i]不為0(秩eps&&(i>=n||i}
return ans;
}int main()
}int ans=gauss();
if(!ans)
printf("no solutions\n");
else if(ans==-1)
printf("many solutions\n");
else
for(int i=0;iprintf("%d\n",(int)round(matrix[i][n])); //注意要四捨五入!
}return 0;
}
高斯消元 hihocoder 1195
include include include include include include include include include include include include include include include include define mt a,b memset a...
hihoCoder 1195 高斯消元 一
時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述小ho 喂不得了啦,那邊便利店的薯片半價了 小hi 啥?小ho 那邊的便利店在打折 啊。小hi 走走走,趕緊去看看 v 於是小hi和小ho來到了便利店。老闆為了 推出了組合包的形式,將不同數量的各類商品打包成乙個組合,顧客...
hihoCoder 1195 高斯消元 一
時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述小ho 喂不得了啦,那邊便利店的薯片半價了 小hi 啥?小ho 那邊的便利店在打折 啊。小hi 走走走,趕緊去看看 v 於是小hi和小ho來到了便利店。老闆為了 推出了組合包的形式,將不同數量的各類商品打包成乙個組合,顧客...