首页 > Windows开发 > 详细

AcWing-3-完全背包问题

时间:2021-03-08 22:14:23      阅读:24      评论:0      收藏:0      [点我收藏+]

题目链接:https://www.acwing.com/problem/content/3/

题目描述:

技术分享图片

 

 

 解题思路:与01背包问题解法代码相似(01背包问题:https://www.cnblogs.com/ygsr/p/14494434.html)

     与01背包问题不同点:1)每件物品可以在背包容量足够的情况下无限制拿取。

               2)最大价值不一定在list[n][m]上需要对list的第m列排序。

     时间复杂度:O(n*n)

源代码:

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;

int list[1005][1005];
int v[1005], w[1005];

int main()
{
	int n,m,t=0;
	cin >> n >> m;
	memset(list,0,n*n*4);
	for (int i = 1; i <= n; i++) cin >> v[i] >> w[i];

	for(int i=1;i<=n;i++)
		for (int j = 1; j <= m; j++)
		{
			list[i][j] = list[i-1][j];
			if (j >= v[i])
				list[i][j] = max(max(list[i][j], w[i] + list[i - 1][j - v[i]]), w[i] + list[i][j - v[i]]);
		}
	for (int i = 1; i <= n; i++)
	{
		for (int j = i+1; j <= n; j++)
		{
			if (list[i][m] > list[j][m])
			{
				t = list[i][m];
				list[i][m] = list[j][m];
					list[j][m] =t;
			}
		}
	}
	cout << list[n][m];
	return 0;
}

 

AcWing-3-完全背包问题

原文:https://www.cnblogs.com/ygsr/p/14502222.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!