传送
这是一个典型的背包方案问题,设f[j]为当前价值为j的方案数,则f[j]=f[j]+f[j-a[i]],即当前方案数为选这个的方案数和不选这个东西的方案数,代码如下
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int n,t=
1,a[
101],m,ans,x,y,f[
5000001];
int flag[
1000001];
int main()
{cin>>n>>
m;
for(
int i=
1;i<=n;i++
)
cin>>
a[i];
f[0]=
1;
for(
int i=
1;i<=n;i++
)
{
for(
int j=m;j>=a[i];j--
)
{f[j]+=f[j-
a[i]];
}
}
cout<<
f[m];
}
其余背包方案数问题:
P2639Bessie的体重
P1049装箱问题
转载于:https://www.cnblogs.com/lcez56jsy/p/10506838.html
相关资源:数据结构—成绩单生成器