标签:
题目链接:
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28436
贪心
按照工作执行时间的从长到短进行排序,之后计算总的执行时间(反证见刘汝佳P4)
计算方法:
先按照交代任务的时间依次累加,就是本次任务开始执行时的时间,这个时间加上任务完成的时间就是这次任务执行完毕后需要的总时间
这个总时间如果没有之前的总时间长的话表示这次任务的执行时间是包括在上次任务的执行时间之间的
超出的话就要更新总的任务执行时间
最后输出总的任务执行时间的计数结果即可
1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 using namespace std; 5 const int MAXN = 1005; 6 struct Job 7 { 8 int b, j; 9 bool operator < (const Job& J) const // 1.const 2.从大到小排序 10 { 11 return j > J.j; 12 } 13 }; 14 Job J[MAXN]; 15 int N; 16 17 int main() 18 { 19 int Case = 0; 20 while(~scanf("%d", &N)) 21 { 22 if(!N) break; 23 Case++; 24 for(int i = 0; i < N; i++) scanf("%d%d", &J[i].b, &J[i].j); 25 sort(J, J+N); 26 //for(int i = 0; i < N; i++) printf("%d\t%d\n", J[i].b, J[i].j); 27 int JobBegin = 0; 28 int TotalTime = 0; 29 for(int i = 0; i < N; i++) 30 { 31 JobBegin += J[i].b; // 当前任务的开始时间 32 TotalTime = max(TotalTime, JobBegin+J[i].j); // 到当前为止所有任务执行完毕所需的时间 33 } 34 printf("Case %d: %d\n", Case, TotalTime); 35 } 36 37 return 0; 38 }
UVA 11729 Commando War 突击战 【贪心】
标签:
原文地址:http://www.cnblogs.com/miaowTracy/p/4836745.html