#include <iostream> using namespace std; int v[21]; int judge(int index,int remain){ if(remain == 0) return 1; //成功 if(index <= 0) return 0; //下標無效,捨棄 return judge(index-1,remain) + judge(index-1, remain - v[index]); /* 從第n個物品往前取。試探性取第index個物品,如果不行會返回0. 取了第index個物品後,如果剩餘體積remain仍然大於0,代表沒有取淨,還可以繼續取,這個時候再試試取第index-1個物品也就是前一個物品。 如果等於0,代表取淨,本次算法結束,次數+1。 */ } int main() { int n ,i; cin >> n; for(i = 1; i <= n ; i ++ ){ cin >> v[i]; } //物品從下標1開始存放於v[] cout << judge(n, 40) << endl; return 0; }