盾神与积木游戏 (贪心典例)
问题描述:
最近的m天盾神都去幼儿园陪小朋友们玩去了~
每个小朋友都拿到了一些积木,他们各自需要不同数量的积木来拼一些他们想要的东西。但是有的小朋友拿得多,有的小朋友拿得少,有些小朋友需要拿到其他小朋友的积木才能完成他的大作。如果某个小朋友完成了他的作品,那么他就会把自己的作品推倒,而无私地把他的所有积木都奉献出来;但是,如果他还没有完成自己的作品,他是不会把积木让出去的哟~
盾神看到这么和谐的小朋友们感到非常开心,于是想帮助他们所有人都完成他们各自的作品。盾神现在在想,这个理想有没有可能实现呢?于是把这个问题交给了他最信赖的你。
输入说明:
第一行为一个数m。
接下来有m组数据。每一组的第一行为n,表示这天有n个小朋友。接下来的n行每行两个数,分别表示他现在拥有的积木数和他一共需要的积木数。
1<=n<=10000,1<=m<=10。
输出说明:
输出m行,如果第i天能顺利完成所有作品,输出YES,否则输出NO。
具体讲解在代码里面,思路很简单的,说的很易懂,uu们看了不懂算我输!
#include<iostream>
#include<algorithm>using namespace std;typedef struct Student//之所以写结构体是因为每个人有两个所属元素:拥有积木和所需积木//结构体封装起来便于后面精确定位;
{int pos;int ned;
}Stu;bool cmp(const Stu &x,const Stu &y)
{return x.ned<y.ned;//结构体sort排序用里面想排列的变量来比较;
}int main()
{int m,i,n,o,p,totpos,totned,pos,u;//totpos表示所有人拥有的积木的总和,totned表示//所有人中需要积木最多的人需要的积木数,pos表示//目前所累积的积木数;cin>>m;for(i=0;i<m;++i) {cin>>n;totpos=totned=pos=0;//每次循环初始化;Stu xs[n];for(o=0;o<n;++o) {cin>>xs[o].pos>>xs[o].ned;totpos+=xs[o].pos;if(xs[o].ned>totned) totned=xs[o].ned;//找出需要积木最多的人需要的积木数;}if(totned>totpos) {//如果需要积木最多的人需要的积木数都大于了所有人拥有的积木//数总和,绝对拼不完了,直接下轮循环;cout<<"NO"<<endl;continue;}sort(xs,xs+n,cmp);//定义一个cmp函数,使整个结构体数组按照所需的积木数的多少来升序排列;for(o=0;o<n;++o) {if(xs[o].ned<=xs[o].pos&&xs[o].pos>pos) {pos=xs[o].pos;//这里pos先没求目前所累积的积木数,而是先找出所有能够拼成功的//人中拥有积木数最多的人(可理解为所需积木数最多的人),那么//可知此人之前的所有人都能拼成功了,因为这个人的积木可以贡献//出去,数组是升序排的。u就是标记这个人的下标;u=o;}}pos=0;//pos开始累积前先赋值为0;for(o=0;o<n;++o) {if(o<=u) pos+=xs[o].pos;//由40行的话可知下标u那个人之前的人都能在得到积木之后//拼成功那么就把之前那些人的积木加上吧;else {if(pos+xs[o].pos>=xs[o].ned) {//加完u之前的所有积木就开始加后面的,但要一个//一个加加之前判断如果我加上后面那个人的积木能//不能满足他所需的积木?能就把他的积木加上再看//下一人,不能的话那么可以知道之后的人也满足不//了了(思考一下我这个论断对吗?),然后else输//出NO就跳出循环不看后面的人了。pos+=xs[o].pos;}else {cout<<"NO"<<endl;break;}}}if(pos==totpos) cout<<"YES"<<endl;//如果pos==totpos,说明所有人的积木都加了一遍,意思//就是满足了所有人因为由52行判断可知不满足那个人的//话不可能加他的积木;else cout<<"NO"<<endl;}return 0;
}
盾神与积木游戏 (贪心典例)相关推荐
- 算法提高 盾神与积木游戏
算法提高 盾神与积木游戏 时间限制:1.0s 内存限制:256.0MB 问题描述 最近的m天盾神都去幼儿园陪小朋友们玩去了~ 每个小朋友都拿到了一些积木,他们各自需要不同数量的积木来拼一些他们 ...
- [蓝桥杯][算法提高VIP]盾神与积木游戏(贪心)
题目描述 最近的m天盾神都去幼儿园陪小朋友们玩去了~ 每个小朋友都拿到了一些积木,他们各自需要不同数量的积木来拼一些他们想要的东西.但是有的小朋友拿得多,有的小朋友拿得少,有些小朋友需要拿到其他 小朋 ...
- 蓝桥杯 ADV-194算法提高 盾神与积木游戏(贪心)
问题描述 最近的m天盾神都去幼儿园陪小朋友们玩去了~ 每个小朋友都拿到了一些积木,他们各自需要不同数量的积木来拼一些他们想要的东西.但是有的小朋友拿得多,有的小朋友拿得少,有些小朋友需要拿到其他小朋友 ...
- 蓝桥杯试题盾神与积木游戏之论减少时间复杂度的重要性
问题描述 最近的m天盾神都去幼儿园陪小朋友们玩去了~ 每个小朋友都拿到了一些积木,他们各自需要不同数量的积木来拼一些他们想要的东西.但是有的小朋友拿得多,有的小朋友拿得少,有些小朋友需要拿到其他小朋友 ...
- [Java] 蓝桥杯ADV-194 算法提高 盾神与积木游戏
问题描述 最近的m天盾神都去幼儿园陪小朋友们玩去了~ 每个小朋友都拿到了一些积木,他们各自需要不同数量的积木来拼一些他们想要的东西.但是有的小朋友拿得多,有的小朋友拿得少,有些小朋友需要拿到其他小朋友 ...
- 蓝桥杯 ADV-194 算法提高 盾神与积木游戏 java版
问题描述 最近的m天盾神都去幼儿园陪小朋友们玩去了~ 每个小朋友都拿到了一些积木,他们各自需要不同数量的积木来拼一些他们想要的东西.但是有的小朋友拿得多,有的小朋友拿得少,有些小朋友需要拿到其他小朋友 ...
- OJ题--盾神与积木游戏
问题描述 : 最近的m天盾神都去幼儿园陪小朋友们玩去了~ 每个小朋友都拿到了一些积木,他们各自需要不同数量的积木来拼一些他们想要的东西.但是有的小朋友拿得多,有的小朋友拿得少,有些小朋友需要拿到其他小 ...
- #bzoj2240#积木游戏(DP? 贪心?)
2240: 积木游戏 时间限制: 1 Sec 内存限制: 128 MB 题目描述 小时候我们都喜欢玩积木.这里的积木都是单位边长的正方体块,多个积木可以堆成一个"高木",&quo ...
- 算法笔记_098:蓝桥杯练习 算法提高 盾神与条状项链(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 有一天,盾神捡到了好多好多五颜六色的珠子!他心想这些珠子这么漂亮,可以做成一条项链然后送给他心仪的女生~于是他用其中一些珠子做成了长度为n ...
- vijos 1464 积木游戏 DP
描述 积木游戏 SERCOI 最近设计了一种积木游戏.每个游戏者有N块编号依次为1 ,2,-,N的长方 体积木.对于每块积木,它的三条不同的边分别称为"a边"."b边&q ...
最新文章
- MapReduce编程系列 — 2:计算平均分
- Javascript prototype理解
- 东南大学c语言下学期期末考试题,东南大学C++期中考试题.doc
- Window将Redis设置为开机启动
- 吕梁离石学校计算机专业在哪里,山西吕梁计算机大专学校有哪些太重技校告诉您...
- 操作系统——实验叁——主存空间的分配与回收
- 使用jquery datatables插件遇到fnReloadAjax的问题
- 系统吞吐量、TPS(也叫QPS)、用户并发量、性能测试概念和公式
- 页脚保持在未满屏页面的底部
- android windowmanager 分析,WindowManagerService
- 中孚计算机保密 卸载,智华计算机终端保密检查系统怎样卸载
- cesium is not defined
- 【计算机图形学】【实验报告】太阳系绘制、B样条曲线绘制(附代码)
- python 简单点餐系统
- Vue中设置浏览器标签栏图标以及title
- 运放的基本应用电路-运放电路设计-运算放大器的基本应用电路
- CSS3 实现圆圈动态发光特效动画的制作
- nginx proxy_pass规则
- upload单独上传和统一上传
- Android点击WebView中的图片查看大图