dp做法
#include<bits/stdc++.h>
using namespace std;
int way[51][30];
int main()
{
int n;
int a[30];
while(cin>>n)
{
for(int i=1;i<=n;i++)
cin>>a[i];
memset(way,0,sizeof(way));
for(int i=0;i<=n;i++)
way[0][i]=1;
for(int i=1;i<=50;i++)
{
for(int j=1;j<=n;j++)
{
way[i][j]=way[i][j-1];
if(i-a[j]>=0)
way[i][j]+=way[i-a[j]][j-1];
}
}
cout<<way[40][]<<endl;
}
}
递归做法
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); //选中he 不选
}