openoj的一个小比赛(B题解题报告)
2011-11-27 00:31
183 查看
第一题:http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=47#problem/B
就是一个贪心,才开始我是买饭时间从小到大排序做,结果贡献了好几次wa无语啊。。最后自己yy了一会发现应该是按吃饭时间从大到小排序,因为吃饭时间最长的先买饭吃饭这样后面的人在他吃饭的时候就可以把买饭与吃饭的事情就做完了。贪心很弱啊。
就是一个贪心,才开始我是买饭时间从小到大排序做,结果贡献了好几次wa无语啊。。最后自己yy了一会发现应该是按吃饭时间从大到小排序,因为吃饭时间最长的先买饭吃饭这样后面的人在他吃饭的时候就可以把买饭与吃饭的事情就做完了。贪心很弱啊。
#include <cstdio> #include <iostream> #include <iostream> #include <algorithm> using namespace std; const int max_s = 1007; struct node { int x,y; }p[max_s]; int cmp(const node a,const node b) { if(a.y!=b.y) return a.y>b.y; else return a.x<b.x; } int main() { //freopen("d.txt","r",stdin); int n,i; while(scanf("%d",&n),n) { for(i=0;i<n;i++) scanf("%d%d",&p[i].x,&p[i].y); sort(p,p+n,cmp);//排序 /* for(i=0;i<n;i++) printf("%d %d\n",p[i].x,p[i].y);*/ int m=p[0].x+p[0].y; int op=p[0].x; for(i=1;i<n;i++) { //printf(">>%d %d\n",i,op); if(m<p[i].x+p[i].y+op) m=p[i].x+p[i].y+op;//下一个人要加上在他之前所有人的总共排队时间。。 //这里是关键,应为只有一个窗口 op+=p[i].x; } printf("%d\n",m); } return 0; }
相关文章推荐
- openoj的一个小比赛(G题解题报告)优先队列
- openoj的一个小比赛(F题解题报告)poj3978(dp+素数筛选)
- openoj的一个小比赛(J题解题报告)poj1703(并查集)
- USACO历年比赛的数据和解题报告
- hdu 1285 确定比赛名次 拓扑排序 解题报告
- 谷歌中国算法比赛解题报告 APAC2016B
- 2008湘潭大学程序设计比赛解题报告
- USACO历年比赛的数据和解题报告
- Leetcode 355. Design Twitter 实现一个Twitter系统 解题报告
- 谷歌中国算法比赛解题报告 APAC2016D
- 谷歌中国算法比赛解题报告 APAC2017B
- 第36届acm_icpc 北京赛区,网络赛解题报告 & 比赛log
- 5.1比赛总结加解题报告
- 解题报告 比赛
- 谷歌中国算法比赛解题报告 APAC2017C
- hdu 1285 确定比赛名次 解题报告
- 谷歌中国算法比赛解题报告 APAC2017A
- 第二届顶嵌杯决赛解题报告------祭奠我的第一次比赛
- USACO历年比赛题目列表,测试数据和解题报告下载
- 2018年全国多校算法寒假训练营练习比赛(第二场)解题报告