洛谷刷题题解笔记----UVA11729 Commando War

简介: 洛谷刷题题解笔记----UVA11729 Commando War

UVA11729 Commando War

题目链接

题意翻译

突击战

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

输入格式

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

输出格式

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

样例输入

3 2 5 3 2 2 1 3 3 3 4 4 5 5 0

样例输出

Case 1:8 Case 2:15

由 @Legends丶dream 提供翻译

输入输出样例

输入

3

2 5

3 2

2 1

3

3 3

4 4

5 5

0

输出

Case 1: 8

Case 2: 15

解题思路

在前面的人执行任务的时候,可以安排后面的人的任务,以此来达到节约时间的目的

排序+贪心

读入数据后对数据按照执行任务的时间从大到小排序

然后遍历循环记录所需的时间

#include <bits/stdc++.h>
using namespace std;
//部下结构体
struct buxia {
  int b;//安排任务时间
  int j;//执行任务时间
};
//按照完成任务时间大到小排列
bool complare( buxia a, buxia b ) {
  return a.j>b.j;
}
int main() {
  int count = 0;//第几个样例
  while ( true ) {
    int n;
    cin >> n;
    //输入n为0退出
    if ( n==0 ) break;
    count++;
    buxia bx[n];
    //读入
    for ( int i=0; i<n; i++ ) {
      cin >> bx[i].b >> bx[i].j;
    }
    //根据完成任务的时间进行排序
    sort( bx, bx+n, complare );
//    for ( int i=0; i<n; i++ ) {
//      cout << bx[i].b << " " << bx[i].j << endl;
//    }
    //安排任务所需要的总时间 
    //到安排第i个人任务时所需要的安排任务时间 
    int time_b = 0;
    int ans = 0;//所有任务安排完执行完的总时间
    for( int i=0; i<n; i++ ) {
      time_b += bx[i].b;//安排新任务
      //安排完第i个任务后的第i人完成任务时的花费时间
      //前i个所有任务完成的时间
      //即判断安排完任务时,是否前面还有人在执行任务
      //前面还在执行任务 到 执行完成所需的时间 
      //和
      //新的任务安排到执行完的时间
      //两个取较大者 
      ans = max( time_b+bx[i].j, ans );
    } 
    cout << "Case " << count << ": " << ans << endl; 
  }
}
相关文章
|
7月前
|
算法 容器
OJ刷题日记:2、双指针(2)
OJ刷题日记:2、双指针(2)
46 0
|
7月前
|
Java
HDU-1286-找新朋友
HDU-1286-找新朋友
40 0
|
7月前
|
算法 测试技术
OJ刷题日记:1、双指针(1)
OJ刷题日记:1、双指针(1)
60 0
|
Java
hdu 1286 找新朋友
hdu 1286 找新朋友
39 0
刚学完二叉树,来试试这些oj题练练手吧!
刚学完二叉树,来试试这些oj题练练手吧!
79 0