HDU 3177 Crixalis's Equipment(很巧妙的贪心)

来源:互联网 发布:差分方程matlab编程 编辑:程序博客网 时间:2024/06/06 02:42

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3177

思路:刚开始的想法是挪的时候占体积大的先进,如果挪的体积相同,则放的时候体积小的先进,结果wrong了,举一个反例

40 2

20 30

2 19

大神地址:http://blog.csdn.net/hjd_love_zzt/article/details/9877115

AC代码:

#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <cstring>#include <climits>#include <cmath>#include <cctype>const int inf = 0x3f3f3f3f;//1061109567typedef long long LL;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;struct node{    int zhang;    int need;}a[1010];bool cmp(node a,node b){    return a.need + b.zhang < a.zhang + b.need;}int main(){    int t;    scanf("%d",&t);    while(t--)    {        int v,n;        scanf("%d%d",&v,&n);        int sum = 0;        for(int i=0; i<n; i++)        {            scanf("%d%d",&a[i].need,&a[i].zhang);            sum += a[i].need;        }        if(sum > v)        {            printf("No\n");            continue;        }        sort(a,a+n,cmp);        int i;        for(i=0; i<n; i++)        {            if(v >= a[i].zhang)                v -= a[i].need;            else                break;        }        if(i == n)            printf("Yes\n");        else            printf("No\n");    }    return 0;}

错误代码:

#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <cstring>#include <climits>#include <cmath>#include <cctype>const int inf = 0x3f3f3f3f;//1061109567typedef long long LL;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;struct node{    int zhang;    int need;}a[1010];bool cmp(node a,node b){    if(a.zhang != b.zhang)        return a.zhang > b.zhang;    else        return a.need < b.need;}int main(){    int t;    scanf("%d",&t);    while(t--)    {        int v,n;        scanf("%d%d",&v,&n);        int sum = 0;        for(int i=0; i<n; i++)        {            scanf("%d%d",&a[i].need,&a[i].zhang);            sum += a[i].need;        }        if(sum > v)        {            printf("No\n");            continue;        }        sort(a,a+n,cmp);        int i;        for(i=0; i<n; i++)        {            if(v >= a[i].zhang)                v -= a[i].need;            else                break;        }        if(i == n)            printf("Yes\n");        else            printf("No\n");    }    return 0;}


0 0
原创粉丝点击