这道题首先是推出一个递归式 ,dp[i,j]=dp[i-1,j]+dp[i,j-c[i]],用递归写完后,会发现超时了,改成动态规划。代码如下。
#include<bits/stdc++.h>
using namespace std;
int main() {
freopen ("money.in","r",stdin);
freopen ("money.out","w",stdout);
int i=0,j=0,V=0,N=0,ch[30];
cin>>V>>N;
long long ans[10005];
memset(ch,0,sizeof(ch));
memset(ans,0,sizeof(ans));
for (i=1;i<=V;i++){
cin>>ch[i];
}
ans[0]=1;
for (i=1;i<=V;i++){
for (j=ch[i];j<=N;j++){
if (ans[j-ch[i]]){
ans[j]+=ans[j-ch[i]];
}
}
}
cout<<ans[N]<<endl;
return 0;
}