HDU.3177Crixalis's Equipment(贪心)
来源:互联网 发布:mac怎么退出全屏 编辑:程序博客网 时间:2024/06/16 02:44
- 题目来源:3177
- 题目分析:一只蝎子要搬动一堆装备到一个容量为V的洞里面,每个装备有两个属性,一个是固有体积A,放置之后洞的剩余空间就会减少A,一个是移动体积B,只有当体积B小于等于当前洞的剩余体积的时候才能放进去。判断能不能把装备都放进去。
0< T<= 10, 0< V<10000, 0< N<1000, 0 < Ai< V, Ai <= Bi < 1000. 我的思路: 首先,采用贪心策略
一开始我是按照移动体积B从大到小排序的,这是错的,因为没有考虑到每次放入装备之后的空间减少的问题。之后加入了空间大小的判断,还是按照B排序,同时剔除移动体积B大于洞的大小V(当时我没想到剩余空间,以为就是个门槛而已)的判断,结果是WA。拿样例来说:
20 3
10 20
3 10
1 7
即洞的体积V是20,有3件装备。
分别是:
如果按照这个顺序放的话,先放第一个,B1<=剩余空间(此时是20),放进去之后洞的体积减少A1,之后放第二个B2<=剩余空间(此时是10),放入之后洞的体积减少A2,最后放第三个,B3<=剩余空间(此时是7),这样就都放进去了。
但是假如换个顺序,先放入A2,之后是A3,A1,就放不进去。
- 扩展到第i个装备和第j个装备:
先放入第i个,需要至少(ai+bj)的空间,那么反过来就需要至少(aj+bi)的空间,那么这种情况下,当然是选择更小的那个,即min(ai+bj,aj+bi);
所以按照应该按照ai+bj从大往小排序。
ai+bj< aj+bi, 按照这个式子不好写,同时根据Ai <= Bi < 1000可知移动体积不小于固有体积,所以移项,同一个装备的放一起, 就变成了
bj-bi< aj-ai 之后排序,再判断,输出结果。
- 完整代码:
#include<stdio.h>typedef struct{ int need; //固有体积 int move; //移动体积}equip;int main(void){ int T; //测试数目 scanf("%d", &T); int v, n, i, j, flag; //洞的体积v,装备数目n, equip a[1001], temp; while (T-- > 0) { flag = 1; scanf("%d%d", &v, &n); for (i = 0; i < n; i++) scanf("%d%d",&a[i].need,&a[i].move); for (i = 0; i < n - 1; i++) { for (j = 0; j < n - 1 - i; j++) { if ((a[j].move-a[j].need) < (a[j + 1].move-a[j+1].need)) //按照bj-bi< aj-ai排序 { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } for (i = 0; i < n; i++) { if (a[i].move > v) //是否超过剩余体积 { flag = 0; break; } else { v -= a[i].need; } } if (flag) printf("Yes\n"); else printf("No\n"); } return 0;}
阅读全文
0 0
- HDU 3177 Crixalis's Equipment 贪心
- hdu 3177 Crixalis's Equipment(贪心)
- hdu 3177Crixalis's Equipment(贪心)
- HDU 3177 Crixalis's Equipment 贪心
- hdu 3177 Crixalis's Equipment (贪心)
- HDU 3177 Crixalis's Equipment(贪心)
- HDU 3177 Crixalis's Equipment 贪心
- HDU.3177Crixalis's Equipment(贪心)
- HDU Crixalis's Equipment (贪心)
- hdu 3177 - Crixalis's Equipment
- HDU 3177 Crixalis's Equipment
- HDU 3177 Crixalis's Equipment
- hdu 3177 Crixalis's Equipment
- hdu 3177 Crixalis's Equipment
- HDU 3177 Crixalis's Equipment
- hdu 3177 Crixalis's Equipment
- HDU 3177 Crixalis's Equipment
- HDU-3177 Crixalis's Equipment
- 平衡二叉树-LintCode
- (11)分页功能
- 手记-LVS概述
- Java编程思想之类型信息(Class对象)
- (转)对冲基金投身“另类数据”淘金热
- HDU.3177Crixalis's Equipment(贪心)
- DevOps
- mysql
- 微信小程序 扫码 加载图片
- 深入理解PHP:高级技巧、面向对象与核心技术(原书第3版) -- 高级 PHP 技巧
- Cpage.js列表渲染
- Fragment简易新闻
- 吴恩达深度学习入门学习笔记之神经网络和深度学习(第一周)
- LeetCode.209 Minimum Size Subarray Sum