提问:为什么二维的分组背包会WA#5
查看原帖
提问:为什么二维的分组背包会WA#5
1186230
liwenliwenllll楼主2024/4/26 23:23

一维分组背包已过,但是我想深入理解其中原理。因此按照自己的理解写了一遍二维分组背包,一直WA#5,因此求助WA#5

#include <bits/stdc++.h>
using namespace std;
int dp[105][1005];	//前i组容量为j的最大价值 
int w[105][1005],v[105][1005];	//i组第j个商品的重量、价值 
int cnt[105];	//i组有多少个商品 
int main()
{
	int m,n; cin>>m>>n;
	int sum = 0;	//一共有多少个组 
	for(int i = 1; i <= n; i++)
	{
		int a,b,c; cin>>a>>b>>c;
		if(!cnt[c]) sum++;
		w[c][cnt[c]] = a;
		v[c][cnt[c]] = b;
		cnt[c]++;
	}
	for(int i = 1; i <= sum; i++)	//遍历第i组 
	{
		for(int j = 0; j <= m; j++)	//遍历容量j 
		{
			for(int k = 0; k < cnt[i]; k++)	//遍历第i组的第k个商品 
			{
				//与"加入本组的当前商品"、"之前加入的本组商品"、"不加入本组商品"相比较 
				if(j >= w[i][k]) dp[i][j] = max(dp[i][j],max(dp[i - 1][j],dp[i - 1][j - w[i][k]] + v[i][k])); 
				else dp[i][j] = max(dp[i][j],dp[i - 1][j]);
			}
		} 
	}
	cout<<dp[sum][m];
	return 0;
}
2024/4/26 23:23
加载中...