题目链接:点击打开链接
题目大意:有n个部下,每个部下需要完成一些任务.第i个部下需要bi分钟交代任务,然后他会独立,无间断地执行ji分钟后完成任务.你需要选择交代任务的顺序,使得所有任务尽早执行完毕.
思路:贪心
分析:按照执行时间ji进行排序,执行时间短的在前.
代码:
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
struct Soldier
{
int brief, job;
Soldier(int b, int j) { brief = b; job = j; }
};
bool compare(Soldier s1, Soldier s2)
{
return s1.job > s2.job;
}
int main()
{
int n, b, j;
int i;
int last_brief_end, task_end;
int cases = 1;
while (scanf("%d", &n) && n != 0)
{
last_brief_end = 0;
task_end = 0;
vector<Soldier> army;
for (i = 0; i < n; i++) {
scanf("%d %d", &b, &j);
Soldier s(b, j);
army.push_back(s);
}
sort(army.begin(), army.end(), compare);
//printf("%d\n", army.at(0).job);
for (i = 0; i < n; i++) {
if (i != 0)
last_brief_end += army.at(i-1).brief;
task_end = max(task_end, last_brief_end + army.at(i).brief + army.at(i).job);
}
printf("Case %d: %d\n", cases++, task_end);
}
return 0;
}