HDU3177贪心

来源:互联网 发布:端口映射端口号 编辑:程序博客网 时间:2024/05/17 03:54

一开始认为是简单的贪心,就对bi进行排序,结果果断wrong掉!后来发现不是简单的排序问题

比如这样一组数据

20 3

物品1:10   20

物品2:3   10

物品3:1   7

如果先放二再放一即必须有:10+20+3=33的空间,如果先放一再放二:10+20+10=40;

这样比较才能尽可能用最小的空间放完东西

经过变换 得到差值比较b.b-b.a>a.b-a.a;

#include<stdio.h>#include<stdlib.h>#include<algorithm>using namespace std;struct elem{int a;int b;}el[10001];bool cmp(struct elem a,struct elem b){return a.b-a.a>b.b-b.a;}int main(){int T;int i,j;scanf("%d",&T);int v,n;int sum;while(T--){memset(el,0,sizeof(el));scanf("%d%d",&v,&n);for(i=0;i<n;i++){scanf("%d %d",&el[i].a,&el[i].b);}sort(el,el+n,cmp);sum=v;for(i=0;i<n;i++){if(sum<el[i].b){sum=-1;break;}else{sum-=el[i].a;}}if(sum==-1)printf("No\n");elseprintf("Yes\n");}return 0;}






0 0
原创粉丝点击