zoukankan      html  css  js  c++  java
  • 突击战(Commando War,UVa 11729)

      你有n个部下,每个部下需要完成一项任务。第i个部下需要你花Bi分钟交待任务,然后他会立刻独立地、无间断地执行Ji分钟后完成任务。你需要选择交待任务的顺序,使得所有任务尽早执行完毕(即最后一个执行完的任务尽早结束)。注意,不能同时给两部下交待任务,但部下们可以同时执行他们各个的任务。

    【输入格式】

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

    【输出格式】

      对于每组数据,输出每组任务完成的最短时间。

    【样例输入】
        3
        2 5
        3 2
        2 1
        3
        3 3
        4 4
        5 5
        0
    【样例输出】
        Case 1: 8
        Case 2:15
    

     代码如下

     #include <cstdio>#include <vector>

    #include <algorithm>
    
    using namespace std;
    
    //定义一个士兵结构体 struct Job{ int j;  //完成任务花的时间 int b;  //交待任务花的时间
     bool operator < (const Job& x) const{   //操作符重载,后面使用sort时使用 return j > x.j; } }; int main(){ int n, b, j, kcase = 1; Job job; while(scant("%d", &n) == 1 && n){ vector<Job> v; for(int i=0; i<n; i++){ scanf("%d%d", &j, &b); job.j = j; job.b = b; v.push_back(job); } sort(v.begin(), v.end()); int s = 0; int ans = 0; for(int i=0; i<n; i++){ s += v[i].b; ans = max(ans, s + v[i].j); } printf("Case %d: %d", kcase, ans); } return 0; }

     执行过程

    4 7
    4 5
    6 2
    
    0:s = 4, ans = max(0, 4+7) = 11
    1: s = 4 + 4 = 8, ans = max(11, 8+5) = 13
    2: s = 8 + 6 = 14, ans = max(13, 14 + 2 = 16) = 16;
    
  • 相关阅读:
    Local minimum and local maximum,second derivative
    Analysis by Its History_exercise 1.5
    陶哲轩实分析 例1.22
    域上多项式的带余除法
    Java反射机制
    Java多线程发展简史
    关于Java性能的9个谬论
    Lucene 工作原理
    Java 理论和实践: 了解泛型
    Java Collection
  • 原文地址:https://www.cnblogs.com/qifeng1991/p/4101581.html
Copyright © 2011-2022 走看看