• 题目来源: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件装备。
    分别是:

属性 固有体积(A) 移动体积(B)
第一件 10 (A1) 20 (B1)
第二件 3 (A2) 10(B2)
第三件 1(A3) 7(B3)

如果按照这个顺序放的话,先放第一个,B1<=剩余空间(此时是20),放进去之后洞的体积减少A1,之后放第二个B2<=剩余空间(此时是10),放入之后洞的体积减少A2,最后放第三个,B3<=剩余空间(此时是7),这样就都放进去了。
但是假如换个顺序,先放入A2,之后是A3,A1,就放不进去。
- 扩展到第i个装备和第j个装备:

属性 固有体积(A) 移动体积(B)
第i个 ai bi
第i个 aj bj

先放入第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;
}

HDU.3177Crixalis's Equipment(贪心)的更多相关文章

  1. HDU 4442 Physical Examination(贪心)

    HDU 4442 Physical Examination(贪心) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=4442 Descripti ...

  2. HDU 5835 Danganronpa (贪心)

    Danganronpa 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5835 Description Chisa Yukizome works as ...

  3. HDU 5821 Ball (贪心)

    Ball 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5821 Description ZZX has a sequence of boxes nu ...

  4. hdu 4004 (二分加贪心) 青蛙过河

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4004 题目意思是青蛙要过河,现在给你河的宽度,河中石头的个数(青蛙要从石头上跳过河,这些石头都是在垂 ...

  5. Saving HDU(hdu2111,贪心)

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. HDU 4714 Tree2cycle:贪心

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 题意: 给你一棵树,添加和删除一条边的代价都是1.问你将这棵树变成一个环的最小代价. 题解: 贪 ...

  7. HDU 5303 Delicious Apples (贪心 枚举 好题)

    Delicious Apples Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Other ...

  8. HDU 5976 Detachment 【贪心】 (2016ACM/ICPC亚洲区大连站)

    Detachment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  9. hdu 5037 Frog(贪心)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5037 题解:为了让放的石头有意义肯定是没l+1的距离放2个也就是说假设现在位置为pos那么 ...

随机推荐

  1. SmartRF Flash Programmer突然打不开显示界面的办法【亲测有效】

    在尝试打开任务管理器结束任务之后重新打开依然无果,在尝试了SmartRF Flash Programmer卸载重装无数次之后依然无果的况状,我被SmartRF Flash Programmer存在界面 ...

  2. java多线程之守护线程与非守护线程

    在java线程中有两种线程,一种是用户线程,其余一种是守护线程. 守护线程具有特殊的含义,比如gc线程.当最后一个非守护线程执行完后,守护线程随着jvm一同结束工作. java中的守护线程需要将Dae ...

  3. CI模板中php脚本的使用

    今天偶然发现,在CI的模板中能够直接使用CI自带的函数,并且可以直接调用controller里面的属性.案例: 控制器: public function test(){ $this->a = ' ...

  4. Swift UI开发初探 (转)

    原文地址:http://www.tairan.com/archives/6600 关于Swift语法,可以参考<Apple Swift编程语言入门教程> 效果如下: 开发环境 Xcode6 ...

  5. 弹性布局 Flexible Box

    页面中任何一个元素都可以指定为 弹性布局(Flex) 属性:display 取值: 1.flex     将块级元素变为弹性布局容器 2.inline-flex   将行内元素变为弹性布局容器 兼容性 ...

  6. Python中的循环体

    一.循环 1.while语句: while 条件: 循环体 else: 当上面的条件不成立时才会执行 执行顺序:判断条件是否为真.如果为真,执行循环体,再次判断条件如果为假,执行else下代码块 2. ...

  7. ASP.NET MVC 音乐商店 - 1 创建项目

    我们的项目从在 Visual Studio 中的文件菜单中选择“新建”,选择“项目”开始. 然后,选择 C# 中的 Web 模板组,在右边的项目模板中选择 ASP.NET MVC3 Web 应用程序, ...

  8. Python开发环境Wing IDE之Search in Files工具详解

    Search in Files工具是Wing IDE中最强大的搜索选项.它支持磁盘.项目,打开编辑器,或其它文件集的多文件批量搜索.它还可以使用通配符搜索,并可以做基于正则表达式的搜索/替换. 建议用 ...

  9. python网络编程-socketserver模块

    使用socketserver 老规矩,先引入import socketserver 必须创建一个类,且继承socketserver.BaseRequestHandler 这个类中必须重写handle( ...

  10. 使用swagger时遇到的问题

    后端写好接口后开始和前端进行联调,为了减少时间成本或者说是后端不想写文档,所以便想使用一套可以自动化生成api接口文档的工具,swagger正是可以解决这一需求.于是很早之前就想把swagger集成到 ...