水~~~~
题目大意:你给n个士兵安排任务,每个士兵安排任务的时间为bi 执行时间为ji ,同一时间只能给一个士兵安排任务,但是士兵执行任务不妨碍给其他士兵安排和执行。求出最短的时间。
解题思路:贪心,无论怎样,执行时间长的就要先安排,因为安排了其他的,他就是最后,所以把所有最后完成的都提到前面,先执行,因此排序即可。
AC代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct work
{
int b, j;
bool operator< (work a)
{
return this->j > a.j;
}
} A[1005];
int main()
{
int n;
int Case = 0;
while(scanf("%d", &n) && n)
{
for(int i=0; i<n; i++)
scanf("%d%d", &A[i].b, &A[i].j);
sort(A, A+n);
int cur = 0, max_time = 0;
for(int i=0; i<n; i++)
{
cur += A[i].b; //更新当前时间
max_time = max(max_time, cur + A[i].j); //更新结束时间
}
printf("Case %d: %d\n", ++Case, max_time);
}
return 0;
}