多重背包问题 I

相较与完全背包问题,多出来的条件是,每种物品的数量是一定的。
只需要多套一个循环,选1个2个3个一直到k个,k+1种可能循环一遍就行了。

#include<bits/stdc++.h>
using namespace std;

const int N=101;

int n,m;
int f[N];

int main()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		int v,w,s;
		cin>>v>>w>>s;
		for(int j=m;j>=v;j--)
			for(int k=1;k<=s&&k*v<=j;k++)
				f[j]=max(f[j],f[j-k*v]+k*w);
	}
	cout<<f[m]<<endl;
}
posted @ 2021-11-05 15:27  longwind7  阅读(29)  评论(0编辑  收藏  举报