神奇的口袋
2755:神奇的口袋
查看 提交 統(tǒng)計 提示 提問
總時間限制: 10000ms 內(nèi)存限制: 65536kB
描述
有一個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。John現(xiàn)在有n個想要得到的物品,每個物品的體積分別是a1,a2……an。John可以從這些物品中選擇一些,如果選出的物體的總體積是40,那么利用這個神奇的口袋,John就可以得到這些物品?,F(xiàn)在的問題是,John有多少種不同的選擇物品的方式。
輸入
輸入的第一行是正整數(shù)n (1 <= n <= 20),表示不同的物品的數(shù)目。接下來的n行,每行有一個1到40之間的正整數(shù),分別給出a1,a2……an的值。
輸出
輸出不同的選擇物品的方式的數(shù)目。
樣例輸入
3
20
20
20
樣例輸出
查看 提交 統(tǒng)計 提示 提問
總時間限制: 10000ms 內(nèi)存限制: 65536kB
描述
有一個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。John現(xiàn)在有n個想要得到的物品,每個物品的體積分別是a1,a2……an。John可以從這些物品中選擇一些,如果選出的物體的總體積是40,那么利用這個神奇的口袋,John就可以得到這些物品?,F(xiàn)在的問題是,John有多少種不同的選擇物品的方式。
輸入
輸入的第一行是正整數(shù)n (1 <= n <= 20),表示不同的物品的數(shù)目。接下來的n行,每行有一個1到40之間的正整數(shù),分別給出a1,a2……an的值。
輸出
輸出不同的選擇物品的方式的數(shù)目。
樣例輸入
3
20
20
20
樣例輸出
3
先提一下遞歸方法,遞推之后補充:
#include <iostream> using namespace std; int a[30]; int n; int ways(int w,int k){if(w == 0) return 1;if(k <= 0) return 0;return ways(w,k-1)+ways(w-a[k],k-1); } int main() {cin >> n;for( int i=1;i<=n;++i){cin>>a[i];}cout << ways(40,n) << endl;return 0; }
總結(jié)
- 上一篇: 机器人军团【动态规划】
- 下一篇: UVA - 202 Repeating