思路:贪心
分析:
1 给定n个人的交待任务的时间和完成任务的时间,要求不能同时给两个人交代任务,但是可以多人同时去做任务,求最短的完成任务的时间
2 根据贪心的原则,我们知道执行时间比较长的任务必须先交待,于是我们只要对这n个任务按照完成任务的时间进行排序,然后枚举n个人进去求解即可。
代码:
#include<cstring> #include<cstdio> #include<iostream> #include<algorithm> using namespace std; const int MAXN = 1010; struct Node{ int b; int j; bool operator<(const Node& tmp)const{ if(j > tmp.j) return true; if(j == tmp.j && b < tmp.b) return true; return false; } }; int n; Node node[MAXN]; int main(){ int Case = 1; while(scanf("%d" , &n) && n){ for(int i = 0 ; i < n ; i++) scanf("%d%d" , &node[i].b , &node[i].j); sort(node , node+n); int ans , tmp; tmp = ans = 0; for(int i = 0 ; i < n ; i++){ tmp += node[i].b;//当前任务的开始的执行时间 ans = max(ans , tmp+node[i].j);//更新任务的最晚结束的时间 } printf("Case %d: %d\n" , Case++ , ans); } return 0; }
时间: 2024-09-23 00:11:43