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 提供翻译

题目描述

PDF

UVA11729 Commando War_第1张图片

输入格式

UVA11729 Commando War_第2张图片

输出格式

样例 #1

样例输入 #1

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

样例输出 #1

Case 1: 8
Case 2: 15

Solution

首先按照任务执行时间进行排序,先派遣执行时间长的士兵去执行任务,并且每一个士兵执行完成的时间为前面派遣的时间加上该士兵执行任务的时间,所以最大的那个完成时间就是我们所需要的

//
// Created by Gowi on 2023/12/2.
//

#include 
#include 

#define N 1050

using namespace std;

struct Soldier {
    int b;
    int s;
};

bool cmp(Soldier a, Soldier b) {
    return a.s > b.s;
}


int main() {
    int n, v = 0;
    while (cin >> n && n != 0) {
        Soldier soldiers[N];
        for (int i = 0; i < n; ++i) {
            cin >> soldiers[i].b >> soldiers[i].s;

        }
        sort(soldiers, soldiers + n, cmp);
        int t = 0;
        int maxT = 0;
        for (int i = 0; i < n; ++i) {
            t += soldiers[i].b;
            maxT = max(maxT, t + soldiers[i].s);
        }
        cout << "Case " << ++v << ": " << maxT << endl;
    }
    return 0;
}

你可能感兴趣的:(算法,c++,数据结构)