【多校连萌2】A 简单的背包问题【补题】

news/2024/7/7 16:47:37

1279: 简单的背包问题

时间限制: 1 秒  内存限制: 32 MB
提交: 363  解决: 21
提交 状态 

题目描述

相信大家都学过背包问题了吧,那么现在我就考大家一个问题。有n个物品,每个物品有它的重量w,价值v,现在有一个容量为W的背包,问你在不超过背包容量的情况下,能装下的物品的最大价值是多少。

T <= 100代表样例数
1 <= n <= 100 物品数
1 <= W <= 100000 背包的容量
1 <= wi <= 100000 每个物品的重量
对于每个i=2,3,…,N, w1 ≤ wi ≤ w1+3.
1 <= vi <= 100000 每个物品的价值

输入

输入格式:

T
n W
w1 v1
w2 v2
:
wn vn

输出

输出占一行,代表最大能装下物品的价值。

样例输入

2
4 6
2 1
3 4
4 10
3 4
4 6
2 1
3 7
4 10
3 6

样例输出

11
13
思路:看数据范围用普通的背包解法必定超范围,哪怕是longlong,题目给出了一个提示w1 ≤ wi ≤ w1+3.,   就可以把物体的重量分为四种情况,再将这四种情况的的价值分别按从大到小的顺序排列,枚举四种情况的物体数量情况,就可以得出给定容量下的最大价值

#include<stdio.h>
#include<algorithm>
using namespace std;
#define N 110
long long  v1[N],v2[N],v3[N],v4[N];

int cmp(int a,int b)
{
	return a>b;
}

long long MAX(long long a,long long b)
{
	if( a > b)
		return a;
	return b;
}

int main()
{
	int t;
	int W,n;
	int w,w1,v;
	int a,b,c,d;
	int i,j,k,l;
	long long sum, ans;
	scanf("%d",&t);
	while(t --)
	{
		scanf("%d%d",&n,&W);
		a = b = c = d = 0;
		sum = 0;
		ans = 0;
		v1[a] = v2[b] = v3[c] = v4[d] = 0;
		scanf("%d%d",&w1,&v1[++a]);
		for(i = 2; i <= n; i ++)
		{
			scanf("%d%d",&w,&v);
			if(w == w1)
				v1[++a] = v;
			else if(w == w1+1)
				v2[++b] = v;
			else if(w == w1+2)
				v3[++c] = v;
			else if(w == w1+3)
				v4[++d] = v;
		}
		sort(v1+1,v1+a+1,cmp);
		sort(v2+1,v2+b+1,cmp);
		sort(v3+1,v3+c+1,cmp);
		sort(v4+1,v4+1+d,cmp);
		for(i = 2; i <= a; i ++)
			v1[i] += v1[i-1];
		for(i = 2; i <= b; i ++)
			v2[i] += v2[i-1];
		for(i = 2; i <= c; i ++)
			v3[i] += v3[i-1];
		for(i = 2; i <= d; i ++)
			v4[i] += v4[i-1];
		for(i = 0; i <=a; i ++)
			for(j = 0; j <= b; j ++)
				for(k = 0; k <= c; k ++)
					for(l = 0; l <= d; l ++)
					{
						sum = i*w1+j*(w1+1)+k*(w1+2)+l*(w1+3);
						if(sum <= W)
						{
							ans = MAX(ans,v1[i]+v2[j]+v3[k]+v4[l]);
						}
					}
		printf("%d\n",ans);
	}
}










































转载于:https://www.cnblogs.com/hellocheng/p/7350078.html


http://www.niftyadmin.cn/n/3156056.html

相关文章

一文读懂git

在日常工作中&#xff0c;经常会用到Git操作。但是对于新人来讲&#xff0c;刚上来对Git很陌生&#xff0c;操作起来也很懵逼。本篇文章主要针对刚开始接触Git的新人&#xff0c;理解Git的基本原理&#xff0c;掌握常用的一些命令。 一、Git工作流程 以上包括一些简单而常用的命…

第三章 Selenide测试框架

前面讲到的都是一些基础理论知识&#xff0c;本章主要学习目前最常用的Web UI自动化工具Selenium工具&#xff0c;其实Selenium WebDriver很多人并不陌生&#xff0c;因为大多数公司现在使用的Web UI测试工具就是Selenium WebDriver.后面主要围绕测试工具Selenide进行实践学习,…

音乐随想——斯美塔那—G小调钢琴协奏曲

乐源 Music -> Piano Trio -> Smetana:Piano Trioin G minor Op.15 总结 每一乐章都会有一段美到极致的主旋律。 第一乐章 起头即有凄凉意味&#xff0c;秋风萧瑟&#xff0c;黄叶满地。大提琴主雄&#xff0c;小提琴主雌&#xff0c;钢琴主流水。 第二乐章 第三乐章 忽而…

如何利用http缓存机制

Web 缓存大致可以分为&#xff1a;数据库缓存、服务器端缓存&#xff08;代理服务器缓存、CDN 缓存&#xff09;、浏览器缓存。 浏览器缓存也包含很多内容&#xff1a;HTTP 缓存、indexDB、cookie、localstorage 等等。这里我们只讨论 HTTP 缓存相关内容。 在具体了解 HTTP 缓…

Zsh 开发指南(第三篇 字符串处理之转义字符和格式化输出)

导读 上一篇讲了 zsh 的常用字符串操作&#xff0c;这篇开始讲更为琐碎的转义字符和格式化输出相关内容。包括转义字符、引号、print、printf 的使用等等。其中很多内容没有必要记忆&#xff0c;作为手册参考即可。 转义字符 转义字符是很多编程语言中都有的概念&#xff0c;它…

UML 类图画法简介

制图使用工具&#xff0c;免费在线作图&#xff0c;实时协作&#xff0c;ProcessOn 支持流程图、思维导图、原型图、UML、网络拓扑图等&#xff0c;力荐&#xff01; 转载于:https://www.cnblogs.com/wxw310415/p/7445522.html

python定义二进制变量_Python学习笔记一:第一个Python程序,变量,字符编码与二进制,用户交互程序...

第一个python程序Windows&#xff1a;设置环境变量&#xff0c;X:\pthonxxx&#xff0c;xxx是版本号在命令提示符下输入python&#xff0c;进入解释器>>>print(“Hello World!”)>>>exit()编辑文件helloworld.py执行&#xff1a;python helloworld.pyLinux&a…

MySQL启动服务提示系统找不到指定文件

Mysql启动服务&#xff1a; C:\Windows\system32>net start mysql 发生系统错误 2。 系统找不到指定的文件。 怎么还是报这个错&#xff1f;难道不是由于配置的原因&#xff1f;对&#xff0c;不是由于上面的配置的问题&#xff0c;但上面的配置添加后也没有错。那是什么…