2755:神奇的口袋
查看 提交 統計 提示 提問
總時間限制: 10000ms 內存限制: 65536kB
描述
有一個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。John現在有n個想要得到的物品,每個物品的體積分別是a1,a2……an。John可以從這些物品中選擇一些,如果選出的物體的總體積是40,那么利用這個神奇的口袋,John就可以得到這些物品。現在的問題是,John有多少種不同的選擇物品的方式。
輸入
輸入的第一行是正整數n (1 <= n <= 20),表示不同的物品的數目。接下來的n行,每行有一個1到40之間的正整數,分別給出a1,a2……an的值。
輸出
輸出不同的選擇物品的方式的數目。
樣例輸入
3
20
20
20
樣例輸出
查看 提交 統計 提示 提問
總時間限制: 10000ms 內存限制: 65536kB
描述
有一個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。John現在有n個想要得到的物品,每個物品的體積分別是a1,a2……an。John可以從這些物品中選擇一些,如果選出的物體的總體積是40,那么利用這個神奇的口袋,John就可以得到這些物品。現在的問題是,John有多少種不同的選擇物品的方式。
輸入
輸入的第一行是正整數n (1 <= n <= 20),表示不同的物品的數目。接下來的n行,每行有一個1到40之間的正整數,分別給出a1,a2……an的值。
輸出
輸出不同的選擇物品的方式的數目。
樣例輸入
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;
}