看完《背包九讲》就会了,主要是背包的变形,求方案数,只需讲转移方程的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;
}
本文介绍了一种基于背包问题的变形算法,通过修改转移方程实现求解特定目标值的方案数量。使用C++实现,具体展示了如何通过两层循环更新状态数组来达到目的。

1339

被折叠的 条评论
为什么被折叠?



