HDU_3177 Crixalis's Equipment(贪心)

  这道题思路。。。想破脑袋没想起来,开始按A排序,后来按B排序,再后来按A/B排序,然后正序走一遍,逆序走一遍,都不对!最后看的解题报告,崩溃!!!按B-A排序。至于证明,不会!这道题告诉我们,关于贪心问题,只要涉及到排序,+,-,*,/,都试试,没准有一个可以的。。。

#include <iostream>
#include
<cstdio>
#include
<cstdlib>

using namespace std;

const int N = 1007;
struct node
{
int a;
int b;
}num[N];

int cmp(const void * c, const void * d)
{
node
* e = (node *)c;
node
* f = (node *)d;
int cha1 = e->b - e->a;
int cha2 = f->b - f->a;
if(cha1 == cha2) return e->a - f->a;
else return cha2 - cha1;

}
int main()
{
//freopen("data.in", "r", stdin);

int T, n, v, i;
int flag;

scanf(
"%d", &T);
while(T--)
{
scanf(
"%d%d", &v, &n); flag = 0;
for(i = 0; i < n; i++)
{
scanf(
"%d%d", &num[i].a, &num[i].b);
if(num[i].b > v || num[i].a > v)
flag
= 1;
}
if(flag) { printf("No\n"); continue; }
qsort(num, n,
sizeof(node), cmp);
i
= 0;
while(i < n)
{
if(v >= num[i].a && v >= num[i].b)
{ v
-= num[i].a; i++;}
else
{flag
= 1; break;}
}
if(!flag) printf("Yes\n");
else printf("No\n");
}
return 0;
}

posted @ 2011-08-19 10:01  AC_Von  阅读(302)  评论(0编辑  收藏  举报