您的位置:首页 > 产品设计 > UI/UE

hdu 3177 Crixalis's Equipment(贪心+差排)

2015-03-24 21:36 387 查看

Crixalis's Equipment

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 3321 Accepted Submission(s): 1322



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




Source
HDU 2009-10 Programming Contest



Recommend
题目大意:给定n个物品,每个物品占一定的空间,且放入前要求空间大于一定值,问给定的空间能否放入所有物品

题目分析:这道题的关键在于放入物品的次序,由此我们容易想到是贪心,所以我们考虑两件物品放入的先后顺序,也就是物品1和物品2

如果先放物品1,那么需要的空间是a1+b2;如果先放物品2,那么需要的空间是a2+b1;

所以如果a1+b2<a2+b1的话,我们一定会选择先放物品1

所以就是a1-b1<a2-b2,那么我们按这个顺序排序,就得到了物品放置的先后顺序

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAX 1007

using namespace std;

struct Point
{
    int a,b;
    bool operator < ( const Point &c ) const
    {
        return a-b < c.a-c.b;
    }
}p[MAX];

int t,m,n;

bool check ( )
{
    for ( int i = 0 ; i < n ; i++ )
        if ( m >= p[i].b ) m -= p[i].a;
        else return false;
    return true;
}

int main ( )
{
    scanf ( "%d" , &t );
    while ( t-- )
    {
        scanf ( "%d%d" , &m , &n );
        for ( int i = 0 ; i < n ; i++ )
            scanf ( "%d%d" , &p[i].a , &p[i].b );
        sort ( p , p+n );
        puts ( check()?"Yes":"No" );
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: