您的位置:首页 > 其它

bzoj 1620: [Usaco2008 Nov]Time Management 时间管理(贪心)

2017-09-03 20:57 477 查看

1620: [Usaco2008 Nov]Time Management 时间管理

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 834  Solved: 527

[Submit][Status][Discuss]

Description

Ever the maturing businessman, Farmer John realizes that he must manage his time effectively. He has N jobs conveniently numbered 1..N (1 <= N <= 1,000) to accomplish (like
milking the cows, cleaning the barn, mending the fences, and so on). To manage his time effectively, he has created a list of the jobs that must be finished. Job i requires a certain amount of time T_i (1 <= T_i <= 1,000) to complete and furthermore must be
finished by time S_i (1 <= S_i <= 1,000,000). Farmer John starts his day at time t=0 and can only work on one job at a time until it is finished. Even a maturing businessman likes to sleep late; help Farmer John determine the latest he can start working and
still finish all the jobs on time.
N个工作,每个工作其所需时间,及完成的Deadline,问要完成所有工作,最迟要什么时候开始.

Input

* Line 1: A single integer: N
* Lines 2..N+1: Line i+1 contains two space-separated integers: T_i and S_i

Output

* Line 1: The latest time Farmer John can start working or -1 if Farmer John cannot finish all the jobs on time.

Sample Input

4

3 5

8 14

5 20

1 16

Sample Output

2

按deline从小到大排序

#include<stdio.h>
#include<algorithm>
using namespace std;
typedef struct Res
{
int x, y;
bool operator < (const Res &b) const
{
if(y<b.y)
return 1;
return 0;
}
}Res;
Res s[100005];
int main(void)
{
int n, i, sum, ans;
scanf("%d", &n);
for(i=1;i<=n;i++)
scanf("%d%d", &s[i].x, &s[i].y);
sort(s+1, s+n+1);
ans = 10000000, sum = 0;
for(i=1;i<=n;i++)
{
sum += s[i].x;
ans = min(ans, s[i].y-sum);
}
printf("%d\n", max(ans, -1));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: