题目地址: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2829
这也是一道贪心的题目。
将Ji从大到小排序,然后找出最大的还需要多少时间。
代码如下:(有详细注释)
#include <iostream> #include <queue> #include <algorithm> #include <cstdio> #include <cstdlib> #include <cstring> #include <string> #include <cmath> using namespace std; int i,j; const int N=10010; typedef long long LL; struct xh { int j,w; friend bool operator < (const xh a,const xh b) { return a.w>b.w; } }a[N]; int n; int main() { int tt=0; while(scanf("%d",&n)&&n) { int sum=0,maxx=0; for(i=1;i<=n;i++) { scanf("%d%d",&a[i].j,&a[i].w); sum+=a[i].j; } sort(a+1,a+1+n); int cur=0; for(i=n;i>1;i--)//倒过来求还要多少额外的时间 { cur+=a[i].j; int t=a[i-1].w-cur;//求后面的时间是不是够完成 if(t>maxx)//找最大的不够时间 maxx=t; } maxx=max(maxx,a[n].w);//比较前面不够的时间和最后一个任务完成的时间 printf("Case %d: %d\n",++tt,sum+maxx);//交代任务时间+不够的时间 } return 0; } /* 3 2 5 3 2 2 1 3 3 3 4 4 5 5 0 */
作者:ilovexiaohao 发表于2013-5-18 11:16:25 原文链接
阅读:49 评论:0 查看评论