Kirito现在被困在一个MMORPG游戏当中,为了离开这个游戏,他现在必须和 条龙进行战斗,Kirito和这 头龙都有一个力量值,用整数表示,Kirito最初的力量值为 。如果在Kirito和第 头龙 的对决当中,Kirito的力量不大于龙的力量 ,那么,Kirito将输掉对决并死亡。如果Kirito的力量大于龙的力量,那么,Kirito将打败这条龙并且升级获得额外的力量提升。
现在,Kirito可以按照任意顺序和这些龙进行决斗,请问,Kirito能否离开这个游戏,即Kirito能够战胜所有的 头龙并且没有死亡。
输入格式
题目包含 !多组 ! 输入
第一行输入两个数字 和 ,表示Kirito的初始力量值和龙的数量。
接下来 行,每行输入两个数字 和 。表示第 条龙的力量以及Kirito击败这头龙能够获得的额外力量值。
输出格式
样例如果Kirito能够离开这个游戏,则输出””, 否则,则输出””.
样例输入
2 2 1 99 100 0
样例输出
YES分析
这一题是一道非常简单的贪心题。
我们将龙从小到大按顺序排列,这样可以打败尽可能多的龙,从而积累更多的战斗力。
最佳贪心策略就是比较 ,最小的最先做,从而积累 。
#include麻烦点个赞!!~~~#include #include using namespace std; const int MAXN = 10005; struct node{ int xi, yi; }a[MAXN]; //结构体 bool cmp(node x, node y){ return x.xi < y.xi; } //先找战斗力小的龙 int main(){ int s, n; while(scanf("%d %d",&s,&n) != EOF){ // 多组数据,无限输入 for(int i=1; i<=n; i++){ scanf("%d%d", &a[i].xi, &a[i].yi); } sort(a+1, a+1+n, cmp); bool flag = false; for(int i=1; i<=n; i++){ if(s > a[i].xi){ // 赢了 s += a[i].yi; // 加能量 } else{ // 输了 flag = true; break; } } if(flag == true) printf("NOn"); else{ printf("YESn"); } } return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)