uva11729(贪心)


贪心的思想,因为任意两段部署工作的时间是不能重合的,所以部署工作的时间不用考虑,尽量将用时长的工作先做就好了。

或许每个人都有成为将军的梦想,小光也是如此。从小,小光就立志长大了以后要做一名军人,保家卫国。有一天,他做了一个梦,在梦里,他是一个英明神武的将军,但是敌国马上就要入侵了,作为将军的他责无旁贷需要挺身而出,于是他开始做一些战略部署。
假设当前小光有n个部下,每个部下需要完成一项任务。第i个部下需要小光花Bi分钟交代任务,然后他会立刻独立地、无间断地执行Ji分钟后完成任务。小光需要选择交代任务的顺序,使得所有任务尽早执行完毕(即最后一个执行完的任务应尽早结束)。注意,不能同时给两个部下交代任务,但部下们可以同时执行他们各自的任务。
Input

输入包含多组数据,每组数据的第一行为部下的个数n(1<=n<=1000);以下n行,每行两个正整数B和J(1<=B<=10000,1<=J<=10000),即交待任务的时间和执行任务的时间。输入结束标志为n=0。
Output

对组每组数据,输出所有任务完成的最短时间。具体输出格式见样例,用Case开头,Case以后输出当前数据的序号,然后输出答案。
Sample Input
3
2 5
3 2
2 1
3
3 3
4 4
5 5
0
Sample Output
Case 1: 8
Case 2: 15

 #include <iostream>
 #include <cstdio>
 #include <algorithm>
 using namespace std;
 int n;
 typedef struct man
 {
     int give;
     int work;
 };
 bool cmp(man t1,man t2)
 {
     return t1.work>t2.work;
 }
 struct man s[10005];
 int main ()
 {
     int kase=1;
     while(scanf("%d",&n)!=EOF&&n)
     {

         for(int i=0;i<n;i++)
         {
             scanf("%d%d",&s[i].give,&s[i].work);
         }
         int  sum=0;
         sort(s,s+n,cmp);
         sum=(s[0].give+s[0].work);
         int give=s[0].give;
//         cout <<endl;
         for(int i=1;i<n;i++)
         {
             give=s[i].give+give;

             sum=max(sum,give+s[i].work);
//            cout << sum <<" " <<give <<" "<<s[i].work<<endl;
         }
         printf("Case %d: %d\n",kase++,sum);
     }
     return 0;
 }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值