有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a 1,a 2……a n。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是,john有多少種不同的選擇物品的方式。
input
輸入的第一行是正整數n (1 <= n <= 20),表示不同的物品的數目。接下來的n行,每行有乙個1到40之間的正整數,分別給出a
1,a2……a
n的值。
output
輸出不同的選擇物品的方式的數目。
sample input
3sample output2020
20
3題解:解題思路在**注釋中
1 #include2 #include3using
namespace
std;45
int a[30
], n;67
int ways[50][40];8
9int
main()
18//
同理,把way[0][0]邊界也設為 1
19 ways[0][0] = 1;20
//w 代表需要湊成的體積, k代表第 k的物品, way[w][k]用來儲存 k個物品湊成 w體積的方法個數
21//
要求way[w][k],只要考慮第 k個物品取不取
22//
所以way[w][k] = way[w - a[k]][k-1] + way[w][k-1]
23for(int w = 1; w <= 40; w++) 29}
30//
所以本體所求即為n件物品湊成40體積的方法數
31 cout << ways[40][n] <33return0;
34 }
神奇的口袋(動態規劃)
有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a 1,a 2 a n。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是,j...
動態規劃之神奇的口袋
有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n 1 n 20 個想要得到的物品,每個物品的體積分別是a1,a2 an。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的...
2755 神奇的口袋(遞迴 動態規劃)
總時間限制 10000ms 記憶體限制 65536kb 描述有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a1,a2 an。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神...