题目描述

cc最近收到了好多礼物,对着满地大小不一的礼物,她想要一个包来装,于是dd就掏出了一个会说话的神奇背包给cc装礼物。
cc为了一次性装尽可能多的礼物,于是跟这个背包定下了一个规则,对每个礼物,背包会给出它对这件礼物的喜爱程度,背包越喜欢这个礼物,它就会越开心,越开心,它就会扩大自己的容量。
于是问题就变成了这样:每个礼物都有自己的体积ai,背包也会给出它对这些礼物的喜爱程度bi,并且为了方便cc计算,背包告诉cc,喜爱程度bi就是这件物体放进背包,背包后会扩大的体积。
那么现在cc想知道,对这一地的礼物,有没有某种放的顺序,可以一次性把所有礼物都放进包里?
当然,物体要先放进背包,背包才会扩大自己的体积
比如当前背包的剩余体积为2,礼物的体积为3,喜爱程度为4,也是不能放进背包的。

输入描述:

输入包含多组数据,第一行为一个整数T(1<=T<=20)每组数据第一行包含两个整数n,v(1<=n,v<=1000)表示共有n个礼物,背包一开始的体积为v接下去的n行每行包含两个整数ai,bi(1<=ai,bi<=1000)表示每个礼物的体积ai与背包对这件礼物的喜爱程度bi1 <= T <= 201 <= n, v <= 1000001 <= ai, bi <= 100000

输出描述:

若存在一种放礼物的顺序可以让cc把所有礼物放进背包,则输出"yes"否则输出"no"(引号不包含在内)
示例1

输入

1
4 2
1 2
2 1
3 1
2 3

输出

yes

题解

贪心。

先把能放进去的且能扩大容量或者保持容量不变的那些都加进去。

加完之后必然是最大容量了。这个时候再慢慢塞减少容量的那些东西即可。细节注意一下。

#include <bits/stdc++.h>
using namespace std;const int maxn = 100000 + 10;
int T;
int n;
long long v;struct X {long long a, b;
}p[maxn];bool cmp(const X&a, const X&b) {return a.a < b.a;
}bool cmp2(const X&a, const X&b) {return a.b < b.b;
}int main() {scanf("%d", &T);while(T --) {scanf("%d%lld", &n, &v);for(int i = 1; i <= n; i ++) {long long x, y;scanf("%lld%lld", &x, &y);p[i].a = x;p[i].b = y - x;}int sum = 0;sort(p + 1, p + 1 + n, cmp);for(int i = 1; i <= n; i ++) {if(p[i].b >= 0 && p[i].a <= v) {v = v + p[i].b;sum ++;}}if(sum == n) {printf("yes\n");continue;}int flag = 1;for(int i = 1; i <= n; i ++) {if(p[i].a > v) {flag = 0;break;}}if(flag == 0) {printf("no\n");continue;}sort(p + 1, p + 1 + n, cmp2);for(int i = n; i >= 1; i --) {if(p[i].b >= 0) continue;if(p[i].a <= v) {v = v + p[i].b;} else {flag = 0;break;}}if(flag == 0) {printf("no\n");continue;}printf("yes\n");}return 0;
}

  

转载于:https://www.cnblogs.com/zufezzt/p/8080705.html

2017年浙江中医药大学大学生程序设计竞赛(重现赛)D - CC的神奇背包相关推荐

  1. 2017年浙江中医药大学大学生程序设计竞赛-B:一生之敌(思维)

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 题目描述 大家都知道Alice和Bob两个人是一生之 ...

  2. FZU Problem 2221 RunningMan(思维考查)——第六届福建省大学生程序设计竞赛-重现赛

    此文章可以使用目录功能哟↑(点击上方[+])  FZU Problem 2221 RunningMan Accept: 0    Submit: 0 Time Limit: 1000 mSec     ...

  3. 第十四届浙江财经大学程序设计竞赛重现赛 ——A

    A.  A sad story 链接:https://www.nowcoder.com/acm/contest/89/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ ...

  4. 【超好懂的比赛题解】“山大地纬杯”第十二届山东省ICPC大学生程序设计竞赛(正式赛)

    title : "山大地纬杯"第十二届山东省ICPC大学生程序设计竞赛(正式赛) date : 2022-5-30 tags : ACM,题解,练习记录 author : Linn ...

  5. 2020年湖南中医药大学“华为杯”大学生程序设计竞赛——正式赛(赛后补题)

    目录 A-幸福小组 B-菜鸡驿站 C-TC的火柴 D-n盏灯 E-电子手表 F- TC的steam账号 G- 万圣节 H-最少颜色 I-2048 J-解密 K-TC的门牌号 L-粗心的小明 M-小明的 ...

  6. 2017第一届河北省大学生程序设计竞赛题解

    超级密码 小明今年9岁了,最近迷上了设计密码!今天,他又设计了一套他认为很复杂的密码,并且称之为"超级密码". 说实话,这套所谓的"超级密码"其实并不难:对于一 ...

  7. 湖南中医药大学信息科学与工程学院第四届大学生程序设计竞赛——正式赛题解

    目录 问题A:X星人的统计 问题B:X星人的报数 问题C:X星人的迷宫 问题D:X星人的高考 问题E:X星人的匹配 问题F:X星人的成绩 问题G:X星人的变换 问题H:X星人的游戏 问题I:X星人的宝 ...

  8. 第三届全国中医药院校大学生程序设计竞赛 (正式赛)

    目录 Problem B. 绿地装饰(暴力模拟+思维) E 解密(水+有点巧妙的解法) F: 巍巍岳麓(类似最小生成树) H: 百舸争流(贪心) Problem B. 绿地装饰(暴力模拟+思维) 时间 ...

  9. 福州大学第十四届程序设计竞赛-重现赛(Record)

    Problem A Salty Fish Accept: 108    Submit: 400 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Pr ...

最新文章

  1. 即学即用的 30 段 Python 非常实用的代码
  2. linux查看网络带宽_每天一个Linux命令之~wget命令
  3. 根据邻接表求深度优先搜索和广度优先搜索_深度优先搜索/广度优先搜索与java的实现...
  4. 今天看到“黑涩会MM”了
  5. android注册界面高级,Android用户注册界面简单设计
  6. linux英文安装教程图解,Linux安装中英文对照小手册
  7. Shell脚本学习(一)Shell命令基础
  8. python github库_让pip使用git和github存储库
  9. 轴承的Abaqus静态分析
  10. 记录一下落地网关soul(shenyu)过程中的一些实践
  11. 安尼泰科T1行车记录仪说明书
  12. 连接git仓库失败解决办法
  13. 编程进阶一:编译器的特殊功能使用及借助编译时完成数据的初始化
  14. python网络爬虫快速下载4K高清壁纸
  15. AG-Admin 学习之路
  16. 减加乘除全选不选dom验证
  17. Python基础编程案例:简单的井字棋游戏设计与制作
  18. 技术选型——混编APP应用概述
  19. 电子商务(B2C)购物网站需求设计方案
  20. Solaris/Linux 命令手册

热门文章

  1. VMware虚拟机里centos7下安装mysql5.6并授权远程连接Navicat
  2. CentOS防止黑客攻击Linux服务器实战演练
  3. 解决Mysql数据库提示innodb表不存在的问题
  4. Zabbix官方文件Zabbix图形树
  5. 力扣题目——637. 二叉树的层平均值
  6. 【PostgreSQL-9.6.3】约束
  7. Vue-cli proxyTable 解决开发环境的跨域问题(转)
  8. H5 播放视频常见bug及解决方案
  9. 【IDEA】关于 IDEA 中新建 web 项目的 webapp 文件夹没有小蓝点 ,启动服务,访问不到解决方案
  10. 如何从javascript检索GET参数? [重复]