AcWing 278. 数字组合
原题链接
简单
作者:
林小鹿
,
2020-10-06 17:59:09
,
所有人可见
,
阅读 549
C++ 代码
/*
01背包问题 每种物品最多被选择一次
物品:每个正整数Ai
物品的总体积V:和为M
物品的个数N:正整数的个数N
每件物品的体积vi:正整数的大小
状态表示:f[i][j] 从前i个正整数中选,和恰好为j的所有选法集合的最大方案数
状态计算:f[i][j]=f[i-1][j]+f[i-1][j-vi]
*/
#include<iostream>
#include<cstdio>
using namespace std;
const int N=10010;
int f[N];
int main()
{
int n,m;
cin>>n>>m;
f[0]=1; //初始化 f[0][0]=1 ,而f[0][1],f[0][2],,,,,f[0][m]=0
for(int i=0;i<n;i++)
{
int v;
cin>>v;
for(int j=m;j>=v;j--)
{
f[j]=f[j]+f[j-v];
}
}
cout<<f[m]<<endl;
return 0;
}