您的位置:首页 > 运维架构

openoj的一个小比赛(B题解题报告)

2011-11-27 00:31 183 查看
第一题:http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=47#problem/B

就是一个贪心,才开始我是买饭时间从小到大排序做,结果贡献了好几次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;
}


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