码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ1620[Usaco2008 Nov]Time Management 时间管理

时间:2017-09-30 16:26:34      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:时间管理   manage   sam   closed   space   rip   end   alt   ace   

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.

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

INPUT DETAILS:

Farmer John has 4 jobs to do, which take 3, 8, 5, and 1 units of
time, respectively, and must be completed by time 5, 14, 20, and
16, respectively.

Sample Output

2

OUTPUT DETAILS:

Farmer John must start the first job at time 2. Then he can do
the second, fourth, and third jobs in that order to finish on time.

贪心水题。按结束时间排序,O(n)找出最早开工的工作,如果在负数时间开工,则不可能做完job。
技术分享
 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 int n,ans=2e9,sum;
 5 struct job{
 6     int t,s;
 7 }momo[1050];
 8 int read(){
 9     int x=0,f=1;char ch=getchar();
10     for(;ch<0||ch>9;ch=getchar())if(ch==-)f=-1;
11     for(;ch>=0&&ch<=9;ch=getchar())x=(x<<1)+(x<<3)+ch-0;
12     return x*f;
13 }
14 bool cmp(job a,job b){return a.s<b.s;}
15 int main(){
16     n=read();
17     for(int i=1;i<=n;i++)momo[i].t=read(),momo[i].s=read();
18     sort(momo+1,momo+n+1,cmp);
19     for(int i=1;i<=n;i++){
20         sum+=momo[i].t;
21         ans=min(ans,momo[i].s-sum);
22     }
23     printf("%d",ans<0?-1:ans);
24     return 0;
25 }
View Code

BZOJ1620[Usaco2008 Nov]Time Management 时间管理

标签:时间管理   manage   sam   closed   space   rip   end   alt   ace   

原文地址:http://www.cnblogs.com/lightandshadow/p/7615031.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!