hdu3177: Crixalis's Equipment

hdu3177: http://acm.hdu.edu.cn/showproblem.php?pid=3177
题意:向一个体积为V的洞搬进东西,物品体积为v[i].a,需要的移动体积为v[i].b,问能否全部搬进洞中 解法:贪心法:对于两件物品a1,b1;a2,b2,若先放1再放2,则V-a1>b2即V>a1+b2;若先放2再放1,则V-a2>b1即V>a2+b1,用贪心法可知要取a1+b2与a2+b1中较小者,即b-a大者先取 code:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
struct abc
{
    int a,b;
}v[1200];
bool cmp(const abc x,const abc y)
{
    return x.b-x.a>y.b-y.a;
}
int main()
{
    int t,V,l,n,s;
    scanf("%d",&t);
    getchar();
    while(t--)
    {
        l=0;
        scanf("%d%d",&V,&n);
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&v[i].a,&v[i].b);
            if(v[i].a>V||v[i].b>V)
                l=1;
        }
        if(l==1)
        {
            printf("No\n");
            continue;
        }
        sort(v,v+n,cmp);
        s=V;
        for(int i=0;i<n-1;i++)
        {
            s=s-v[i].a;
            if(v[i+1].a>s||v[i+1].b>s)
            {
                l=1;
                break;
            }
        }
        if(l==1)
            printf("No\n");
        else
            printf("Yes\n");
    }
}
/*input:
2

20 3
10 20
3 10
1 7

10 2
1 10
2 11

output:
Yes
No
*/

posted on 2012-07-25 19:42  acmer-jun  阅读(112)  评论(0编辑  收藏  举报

导航