看完《背包九讲》就会了,主要是背包的变形,求方案数,只需讲转移方程的max改成sum即可。
#include<cstdio>
#include<cstdlib>
using namespace std;
int s[30];
long long f[10010];
int main()
{
freopen("money.in","r",stdin);
freopen("money.out","w",stdout);
int n,v;
cin>>n>>v;
for(int i=1;i<=n;i++){
cin>>s[i];
}
f[0]=1;
for(int i=1;i<=n;i++){
for(int j=s[i];j<=v;j++)
f[j]+=f[j-s[i]];
}
cout<<f[v]<<endl;
return 0;
}