#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;
}

京公网安备 11010502036488号