UVa 11729 Commando War 突击战

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

既然是要尽早完成任务,当然执行时间长的先交待,先执行。所以对所有数据按执行时间从大到小的顺序进行排序,然后开始处理,通过更新最晚的时间来得到最终结果。

简单的贪心,附上AC代码:

   1: #include <stdio.h>
   2: #include <math.h>
   3: #include <iostream>
   4: #include <cstdarg>
   5: #include <algorithm>
   6: #include <string.h>
   7: #include <stdlib.h>
   8: #include <string>
   9: #include <list>
  10: #include <vector>
  11: #include <map>
  12: #define LL long long
  13: #define M(a) memset(a, 0, sizeof(a))
  14: using namespace std;
  15:  
  16: void Clean(int count, ...)
  17: {
  18:     va_list arg_ptr;
  19:     va_start (arg_ptr, count);
  20:     for (int i = 0; i < count; i++)
  21:         M(va_arg(arg_ptr, int*));
  22:     va_end(arg_ptr);
  23: }
  24:  
  25: typedef struct A
  26: {
  27:     int b, j;
  28:     bool operator < (const A& x) const
  29:     {
  30:         return j > x . j;
  31:     }
  32: }A;
  33:  
  34: int main()
  35: {
  36:     int n, count = 1;
  37:     while (~scanf("%d", &n) && n)
  38:     {
  39:         vector <A> buf;
  40:         int b, j;
  41:         for (int i = 0; i < n; i++)
  42:         {
  43:             scanf("%d%d", &b, &j);
  44:             buf.push_back((A){b, j});
  45:         }
  46:         sort(buf.begin(), buf.end());
  47:         int end = 0, now = 0, ans = 0;
  48:         for (int i = 0; i < n; i++)
  49:         {
  50:             now += buf[i] . b;
  51:             end = max(end, now + buf[i] . j);
  52:         }
  53:         printf("Case %d: %d\n", count++, end);
  54:     }
  55:     return 0;
  56: }

posted @ 2013-07-20 15:49  ~無痕~  阅读(666)  评论(0编辑  收藏  举报