算法竞赛入门经典 突击战
ps:
/*
Name: 突击战
Copyright: 刘汝佳
Author: Analyst
Date: 27/02/14 23:59
Description: dev-cpp 5.5.3
*/
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct Job
{
int j, b;
bool operator < (const Job& x) const //运算符重载。不要忘记const修饰符
{
return j > x.j; //由大到小排序
}
};
int main()
{
int n, b, j, kase = 1;
while (scanf("%d", &n) == 1 && n)
{
vector<Job> v;
for (int i = 0; i < n; ++i)
{
scanf ("%d%d", &b, &j);
v.push_back((Job){j,b});
}
sort(v.begin(), v.end()); //使用Job类自己的 < 运算符排序(大->小)
int s = 0;
int ans = 0;
for (int i = 0; i < n; ++i)
{
s += v[i].b; //当前任务的开始执行时间
ans = max(ans, s+v[i].j); //更新执行任务完成时最晚时间
}
printf("Case %d: %d\n",kase++, ans);
}
return 0;
}
ps:
1.注意重载sort排序,使之由大到小排序。
2.注意任务结束时间,选择最长的。