博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2017年浙江中医药大学大学生程序设计竞赛(重现赛)D - CC的神奇背包
阅读量:6576 次
发布时间:2019-06-24

本文共 1933 字,大约阅读时间需要 6 分钟。

题目描述

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与背包对这件礼物的喜爱程度bi 1 <= T <= 20 1 <= n, v <= 100000 1 <= ai, bi <= 100000

输出描述:

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

输入

14 21 22 13 12 3

输出

yes

题解

贪心。

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

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

#include 
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

你可能感兴趣的文章
微软职位内部推荐-Software Engineer II
查看>>
python全栈开发 * 33 知识点汇总 * 180718
查看>>
cetus系列~ 继续分析
查看>>
字符串处理 Codeforces Round #297 (Div. 2) B. Pasha and String
查看>>
uva 12714 2013Dhaka F
查看>>
java_hdfs之读写文件
查看>>
2017-2018-1 20155229 《信息安全系统设计基础》第十三周学习总结
查看>>
mysql中查看sql语句的加锁信息
查看>>
Android SDK下载和更新失败的解决方法
查看>>
(转载)IoC模式
查看>>
L Language——SAP HANA学习笔记系列(二)
查看>>
spring事务配置
查看>>
chrome插件
查看>>
尾部的0
查看>>
经典排序算法python实现
查看>>
微信小程序之授权 wx.authorize
查看>>
SPOJ 1811 Longest Common Substring (后缀自动机第一题,求两个串的最长公共子串)
查看>>
在Linux下蓝牙进行rfcomm连接
查看>>
React 编码
查看>>
redis 命令参考
查看>>