數論 HihoCoder1195 高斯消元

2021-08-25 14:33:31 字數 1580 閱讀 1601

時間限制: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來到了便利店。老闆為了 推出了組合包的形式,將不同數量的各類商品打包成乙個組合,顧客...