時間限制: 1 sec 記憶體限制: 64 mb多重揹包,把每一種重量的砝碼二進位制分割,然後設計dp方程表示某種重量是否能秤出。提交: 610 解決: 270
[提交][狀態][討論版]
設有n種砝碼,第k種砝碼有ck個,每個重量均為wk,求:用這些砝碼能秤出的不同重量的個數,但不包括乙個砝碼也不用的情況。
輸入的第一行只有乙個數n,表示不同的砝碼的種類數.
第2行至第n+1行,每行有兩個整數.第k+1行的兩個數分別表示第k種砝碼的個數和重量.
輸出中只有一行資料:total=n。表示用這些砝碼能秤出的不同重量數。
22 22 3
total=8對於100%的資料,砝碼的種類n滿足:1≤n≤100;對於30%的資料,砝碼的總數量c滿足:1≤c≤20;
對於100%的資料,砝碼的總數量c滿足:1≤c≤100;
對於所有的資料,砝碼的總重量w滿足:1≤w≤400000;
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7view code8using
namespace
std;910
int n, f[500000
], c, w, ans;
1112 vectorpack;
1314
intmain()
23if(c)pack.push_back(c *w);24}
25for(int i = 0 ; i < pack.size() ; i ++)29}
30for(int i = 1 ; i <= 450000 ; i ++)
33 printf("
total=%d\n
", ans);
34 }
DP地獄訓練 石子歸併
時間限制 1 sec 記憶體限制 64 mb 提交 694 解決 295 提交 狀態 討論版 有一堆石頭質量分別為w1,w2,wn.wi 10000 將石頭合併為兩堆,使兩堆質量的差最小。輸入第一行只有乙個整數n 1 n 50 表示有n堆石子。接下去的n行,為每堆石子質量。輸出只有一行,該行只有乙個...
DP地獄訓練 石子合併
時間限制 1 sec 記憶體限制 64 mb 提交 1004 解決 204 提交 狀態 討論版 有n堆石子圍成乙個圓圈。現在需要把它們合併成一堆石子。每次合併時,只能合併相鄰的兩堆石子,所耗力氣為兩堆石子重量之和,合併得到的新堆的重量為原兩堆重量之和。問最少需要耗費多少力氣?資料規模 1 n 200...
洛谷 1441 砝碼秤重
題意概述 現有n個砝碼,重量分別為a1,a2,a3,an,在去掉m個砝碼後,問最多能稱量出多少不同的重量 不包括0 題解 先dfs決定用哪些砝碼,然後dp求可以稱出的重量有多少種 1 include2 include3 include4 using namespace std 5const int ...