记忆化搜索
#include<iostream>
#include<cstdio>
#include<cstring>
#include<set>
#include<vector>
#include<algorithm>
typedef long long ll;
using namespace std;
ll a[100005];
int n,m,t;
int cnt = 0;
ll mem[1000][100];
ll dfs(int num,int ans){
if(mem[num][ans])return mem[num][ans];
// cout<<cnt++<<": mem["<<num<<"]["<<ans<<"] = "<<mem[num][ans]<<endl;查看加记忆化和不加记忆化的区别
if(ans == 40){
mem[num][ans] = 1;
return 1;
}
if(ans > 40)return 0;
if(num>=n)return 0;
mem[num][ans] = dfs(num+1,ans+a[num]) + dfs(num+1,ans);
return mem[num][ans];
}
int main()
{
cin>>n;
for(int i = 0 ; i < n; i++){
cin>>a[i];
}
;
cout<<dfs(0,0)<<endl;
return 0;
}