-
这题是用贪心算法,先把积木给需要最少的人。其实在操作系统的内存分配中有个叫“银行家算法”跟这题是一样的。可见ACM的工程性还是挺强的。
#include <stdio.h>
#include <algorithm>
using namespace std;
struct Jm
{
int has;
int want;
};
bool cmp(Jm j1, Jm j2)
{
return j1.want < j2.want;
}
int main()
{
Jm jm[10000];
int n;
int s;
int i;
while (scanf("%d", &n) && n!=0)
{
scanf("%d", &s);
for (i=0; i<n; i++)
{
scanf("%d%d", &jm[i].has, &jm[i].want);
}
sort(jm, jm+n, cmp);
for (i=0; i<n; i++)
{
if (s < jm[i].want)
{
break;
}
else
s += jm[i].has;
}
if (i == n)
{
printf("YES\n");
}
else
printf("NO\n");
}
return 0;
}