bzoj1620[Usaco2008 Nov]Time Management 时间管理*

bzoj1620[Usaco2008 Nov]Time Management 时间管理

题意:

n个任务,每个有一个所需时间和最晚完成时刻,问最晚要从什么时候开始工作。n≤1000

题解:

贪心,按最晚完成时刻从早到晚排序,如果当前任务来不及完成,就将前面的任务往前推,否则累积一个“自由时间”。当推任务时,如果之前有“自由时间”,就用自由时间减往前推的时间,否则用最晚开始时间去减往前推的时间。反思:我开始贪错了,按最晚开始时刻从早到晚排序,结果WA很久。现在还是想不太清楚原因,希望哪位神犇能帮我指出。

以下数据会出错:

2

10 20

1 12

如果按正确的应该输出9,但按我的错解输出的是1。

代码:

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4 #define inc(i,j,k) for(int i=j;i<=k;i++)
 5 #define maxn 1100
 6 using namespace std;
 7
 8 inline int read(){
 9     char ch=getchar(); int f=1,x=0;
10     while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1; ch=getchar();}
11     while(ch>=‘0‘&&ch<=‘9‘)x=x*10+ch-‘0‘,ch=getchar();
12     return f*x;
13 }
14 int n; struct job{int t,s;}; job jobs[maxn];
15 bool cmp(job a,job b){return a.s==b.s?a.t<b.t:a.s<b.s;};
16 int main(){
17     n=read(); inc(i,1,n)jobs[i].t=read(),jobs[i].s=read(); sort(jobs+1,jobs+1+n,cmp);
18     int ans=jobs[1].s-jobs[1].t,rem=0;
19     inc(i,2,n){
20         if(jobs[i].s-jobs[i].t<jobs[i-1].s)rem-=jobs[i-1].s-(jobs[i].s-jobs[i].t);
21         else rem+=jobs[i].s-jobs[i].t-jobs[i-1].s;
22         if(rem<0)ans+=rem,rem=0; if(ans<0){printf("-1"); return 0;}
23     }
24     printf("%d",ans); return 0;
25 }

20160729

时间: 2024-10-08 01:49:37

bzoj1620[Usaco2008 Nov]Time Management 时间管理*的相关文章

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

1620: [Usaco2008 Nov]Time Management 时间管理 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 506  Solved: 306[Submit][Status] Description Ever the maturing businessman, Farmer John realizes that he must manage his time effectively. He has N jobs convenien

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

1620: [Usaco2008 Nov]Time Management 时间管理 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 850  Solved: 539[Submit][Status][Discuss] Description Ever the maturing businessman, Farmer John realizes that he must manage his time effectively. He has N jobs

BZOJ 1620: [Usaco2008 Nov]Time Management 时间管理( 二分答案 )

二分一下答案就好了... ---------------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<cctype> #include<iostream> #define rep( i , n ) for( int i

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

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1620 题意: 有n个工作,每一个工作完成需要花费的时间为tim[i],完成这项工作的截止日期为dead[i]. 问你在保证所有工作按时完成的前提下,最晚什么时候开始工作. (每天从时刻0开始算.如果无论如何都完成不了,输出-1) 题解: 贪心. 先将所有工作按dead从大到小排序. 当前开始工作的时间为start(初始为INF). 对于每个工作,start一定要满足两个条件: start

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

Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 920  Solved: 569[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,0

bzoj1620:时间管理

1620: [Usaco2008 Nov]Time Management 时间管理 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 571  Solved: 343[Submit][Status][Discuss] Description Ever the maturing businessman, Farmer John realizes that he must manage his time effectively. He has N jobs

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

P2920 [USACO08NOV]时间管理Time Management 显然的贪心. 按deadline从大到小排序,然后依次填充时间. 最后时间为负的话那么就是无解 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #define re register 6 using namespace std; 7 int max(int a,in

session management会话管理的原理

web请求与响应基于http,而http是无状态协议.所以我们为了跨越多个请求保留用户的状态,需要利用某种工具帮助我们记录与识别每一次请求及请求的其他信息.举个栗子,我们在淘宝购物的时候,首先添加了一本<C++ primer>进入购物车,然后我们又继续去搜索<thinking in java>,继续添加购物车,这时购物车应该有两本书.但如果我们不采取session management会话管理的话,基于http无状态协议,我们在第二次向购物车发出添加请求时,他是无法知道我们第一次添

【安全牛学习笔记】MANAGEMENT FRAME 管理帧

MANAGEMENT FRAME 管理帧 MANAGEMENT FRAME                      管理帧 MANAGEMENT FRAME                用于协商和控制STA与AP之间的关系 BEACON FRAMES                             AP发送的广播帧,通告无线网络的存在(BSSID) 发包频率                                      102.4ms (可变)