你有 n 个部下,每个部下需要完成一个任务。第 i 个部下需要你花 Bi 分钟交待任务,然后他会立刻独立地、无间断地执行 Ji 分钟后完成任务。你需要选择交待任务的顺序,使得所有任务尽早执行完毕(即最后一个执行完的任务尽早结束)。注意,不能同时给两个部下交待任务,但部下们可以同时执行他们各自的任务。
既然是要尽早完成任务,当然执行时间长的先交待,先执行。所以对所有数据按执行时间从大到小的顺序进行排序,然后开始处理,通过更新最晚的时间来得到最终结果。
简单的贪心,附上AC代码:
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <cstdarg>
#include <algorithm>
#include <string.h>
#include <stdlib.h>
#include <string>
#include <list>
#include <vector>
#include <map>
long
sizeof(a))
namespace std;
15:
int count, ...)
17: {
18: va_list arg_ptr;
19: va_start (arg_ptr, count);
int i = 0; i < count; i++)
int*));
22: va_end(arg_ptr);
23: }
24:
struct A
26: {
int b, j;
const
29: {
return j > x . j;
31: }
32: }A;
33:
int main()
35: {
int n, count = 1;
, &n) && n)
38: {
39: vector <A> buf;
int b, j;
int i = 0; i < n; i++)
42: {
, &b, &j);
44: buf.push_back((A){b, j});
45: }
46: sort(buf.begin(), buf.end());
int end = 0, now = 0, ans = 0;
int i = 0; i < n; i++)
49: {
50: now += buf[i] . b;
51: end = max(end, now + buf[i] . j);
52: }
, count++, end);
54: }
return 0;
56: }