给n个人分配任务 分配任务的时间b和执行任务的时间j 每一次只能给一个人分配任务 求最小的时间
贪心求解 将任务 按照执行时间从长到短排序 依次分配任务 并执行 求出时间即所得最短时间 证明自证
#include <cstdio> #include <algorithm> using namespace std; const int maxn = 1010; struct Job{ int b, j; bool operator < (const Job& x) const{ return j > x.j; } }job[maxn]; int main(){ int n; int cas = 0; while(scanf("%d", &n)!=EOF && n){ for(int i = 0; i < n; ++i){ scanf("%d%d", &job[i].b, &job[i].j); } sort(job, job+n); int cnt = 0; int ans = 0; for(int i = 0; i < n; ++i){ cnt += job[i].b; ans = max(ans, cnt + job[i].j); } printf("Case %d: %d\n", ++cas, ans); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-19 16:23:58