完全背包问题

题目链接:
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;
}
原文地址:https://www.cnblogs.com/longwind7/p/15510356.html