您的位置:首页 > 其它

1134. 积木分发(贪心算法,先满足需求最小的)

2013-01-02 19:53 363 查看
/*1134. 积木分发(贪心)
题目大意:有n个小朋友,每个人持有a个积木,需要b个积木才能完成
主持人有s个积木,问如何才能保证全部小朋友才能完成积木
任务。弄完的小朋友必须归还积木,包括手中持有的积木。
思路:采用贪心算法,先分给需要最少积木的小朋友。依次类推
若到最后,无法完成输入No。

*/
#include <stdlib.h>
#include <iostream>
#include <memory.h>
using namespace std;

int main()
{
int n;
long long left;
int isVisit[10000];
long long childInfo[10000][2];
long min;
int  minIndex;
bool ok = true;
while(cin >> n >> left && n!=0){
ok = true;
memset(isVisit, 0, sizeof(isVisit));
for(int i=0; i<n; i++)
cin >> childInfo[i][0] >> childInfo[i][1];

for(int i=1; i<= n; i++){
min = 1073741428;
minIndex = -1;
for(int j=0; j< n; j++){
if(isVisit[j] == 0){
if(min > childInfo[j][1]){
min = childInfo[j][1];
minIndex = j;
}
}
}

if(left < min){
ok = false;
break;
}
//已经弄完的小朋友标识为1
isVisit[minIndex] = 1;
//每个小孩用完后,交还手中持有的积木数量
left = left + childInfo[minIndex][0];

}
if(ok)
cout << "YES" << endl;
else
cout << "NO" << endl;

}
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: