Crixalis's Equipment

贪心算法

Crixalis's Equipment
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 34 Accepted Submission(s) : 14
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
Crixalis - Sand King used to be a giant scorpion(蝎子) in the deserts of Kalimdor. Though he's a guardian of Lich King now, he keeps the living habit of a scorpion like living underground and digging holes.
Someday Crixalis decides to move to another nice place and build a new house for himself (Actually it's just a new hole). As he collected a lot of equipment, he needs to dig a hole beside his new house to store them. This hole has a volume of V units, and Crixalis has N equipment, each of them needs Ai units of space. When dragging his equipment into the hole, Crixalis finds that he needs more space to ensure everything is placed well. Actually, the ith equipment needs Bi units of space during the moving. More precisely Crixalis can not move equipment into the hole unless there are Bi units of space left. After it moved in, the volume of the hole will decrease by Ai. Crixalis wonders if he can move all his equipment into the new hole and he turns to you for help.
Input
The first line contains an integer T, indicating the number of test cases. Then follows T cases, each one contains N + 1 lines. The first line contains 2 integers: V, volume of a hole and N, number of equipment respectively. The next N lines
contain N pairs of integers: Ai and Bi.
0<T<= 10, 0<V<10000, 0<N<1000, 0 <Ai< V, Ai <= Bi < 1000.
Output
For each case output "Yes" if Crixalis can move all his equipment into the new hole or else output "No".

Sample Input

2
20 3
10 20
3 10
1 7
10 2
1 10
2 11

Sample Output

Yes
No

分析:
搬的时候所占体积为b[i],
搬完后减少a[i]
先搬A,瞬间占用空间最大为 a1+b2;
先搬B,瞬间占用空间最大为a2+b1.
为了使剩下的体积最大,我们要选择这两个所占体积最小的
当a1+b2,a2+b1相等时,应该选a更小的
代码如下:

#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
    int a;
    int b;
};

int cmp(node x,node y)
{
    if(x.a+x.b==y.a+y.b)
    return x.a<y.a;
    return x.b-x.a>y.b-y.a;
}
int main()
{
    int t,v,n,i=0;
    node h[1005];
    cin>>t;
    while(t--)
    {
        cin>>v>>n;
        for( i=0;i<n;i++)
        {
            cin>>h[i].a>>h[i].b;
        }
        sort(h,h+n,cmp);
        for( i=0;i<n;i++)
        {
            if(v>=h[i].b)
            {
                v-=h[i].a;
            }
            else break;
        }
        if(i==n)
        cout<<"Yes"<<endl;
        else
        cout<<"No"<<endl;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 12,160评论 0 10
  • “我当然知道,我会对故乡浮粪四溢的墟场失望,会对故乡拥挤不堪的车厢失望,会对故乡阴沉连日的雨季失望,但那种失望不同...
    李颖千阅读 3,134评论 2 4
  • 每周六的晚八点十分成了一周最期待的时刻,一个半小时我霸占着电视,欣赏着董卿精心准备的《朗读者》,从开播以来一直没有...
    王丽燕199阅读 9,331评论 12 59
  • 遐思千里云天外,展翅八荒巨野开。 萧瑟秋风吹不尽,哀鸿遍地早霜白。 当年耻辱今犹记,往日嚣张岂再来。 崛起神州强劲...
    不惑而歌阅读 1,384评论 35 28