题目链接:
https://www.acwing.com/problem/content/3/
思路
完全背包问题就是在01背包问题的基础上增加了一个条件,所有物品的数量无限。
所以在写的时候只需要一维数组从小到大枚举,因为对于每个i(物品数),更新都是从小到大开始的,所以每次更新都保证前面的是已经更新过的,且物品数量是不受限制的,这样也就能保证得到的是正确的结果。
题解
#include<bits/stdc++.h>
using namespace std;
const int N=1001;
int n,m;
int f[N];
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
int v,w;
cin>>v>>w;
for(int j=v;j<=m;j++)
f[j]=max(f[j],f[j-v]+w);
}
cout<<f[m]<<endl;
return 0;
}