BZOJ1620[Usaco2008 Nov]Time Management 时间管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ1620[Usaco2008 Nov]Time Management 时间管理相关的知识,希望对你有一定的参考价值。

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 时间管理的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ1620[Usaco2008 Nov]Time Management 时间管理

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

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

BZOJ_1620_[Usaco2008_Nov]_Time_Management_时间管理_(二分+贪心)

bzoj1620 / P2920 [USACO08NOV]时间管理Time Management

Bzoj 1229: [USACO2008 Nov]toy 玩具