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 <= dead - tim (最后一刻才完成这项工作的开始时间)

    start + tim <= 原来的start (这项工作做完了之后,才能开始别的工作)

  所以start = min(start - tim, dead - tim)

AC Code:

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <algorithm>
 5 #define MAX_N 1005
 6 #define INF 10000000
 7
 8 using namespace std;
 9
10 struct Work
11 {
12     int tim;
13     int dead;
14     Work(int _tim,int _dead)
15     {
16         tim=_tim;
17         dead=_dead;
18     }
19     Work(){}
20     friend bool operator < (const Work &a,const Work &b)
21     {
22         return a.dead>b.dead;
23     }
24     void read_work()
25     {
26         cin>>tim>>dead;
27     }
28 };
29
30 int n;
31 int start=INF;
32 Work work[MAX_N];
33
34 void read()
35 {
36     cin>>n;
37     for(int i=0;i<n;i++)
38     {
39         work[i].read_work();
40     }
41 }
42
43 void solve()
44 {
45     sort(work,work+n);
46     for(int i=0;i<n;i++)
47     {
48         Work now=work[i];
49         start=min(start-now.tim,now.dead-now.tim);
50     }
51 }
52
53 void print()
54 {
55     if(start>=0) cout<<start<<endl;
56     else cout<<-1<<endl;
57 }
58
59 int main()
60 {
61     read();
62     solve();
63     print();
64 }
时间: 2024-10-10 10:50:16

BZOJ 1620 [Usaco2008 Nov]Time Management 时间管理:贪心的相关文章

[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 时间管理

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

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

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

bzoj1620[Usaco2008 Nov]Time Management 时间管理 题意: n个任务,每个有一个所需时间和最晚完成时刻,问最晚要从什么时候开始工作.n≤1000 题解: 贪心,按最晚完成时刻从早到晚排序,如果当前任务来不及完成,就将前面的任务往前推,否则累积一个“自由时间”.当推任务时,如果之前有“自由时间”,就用自由时间减往前推的时间,否则用最晚开始时间去减往前推的时间.反思:我开始贪错了,按最晚开始时刻从早到晚排序,结果WA很久.现在还是想不太清楚原因,希望哪位神犇能帮我

BZOJ 1229 [USACO2008 Nov]toy 玩具(三分+贪心)

[题木链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1229 [题目大意] 每天对玩具都有一定的需求ni,每天可以花f价值每条购买玩具, 当天用完的玩具可以花费fA价值每个通过快消毒在A天之后得到一条可用的, 也可以通过花费fB价值每个,通过慢消毒在B天之后获得可用的 问满足每天需求所用的最小花费. [题解] 这是纸巾问题的费用流模型,费用流做法见 BZOJ 1221 [HNOI2001] 软件开发 但是我们发现N=100000的规模完全

[BZOJ] 1618: [Usaco2008 Nov]Buying Hay 购买干草

1618: [Usaco2008 Nov]Buying Hay 购买干草 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1216  Solved: 633[Submit][Status][Discuss] Description 约翰的干草库存已经告罄,他打算为奶牛们采购H(1≤H≤50000)磅干草,他知道N(1≤N≤100)个干草公司,现在用1到 N给它们编号.第i个公司卖的干草包重量为Pi(1≤Pi≤5000)磅,需要的开销为Ci(l≤Ci≤5

BZOJ 1230: [Usaco2008 Nov]lites 开关灯( 线段树 )

线段树.. --------------------------------------------------------------------------------- #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #define rep( i , n ) for( int i = 0 ; i < n ; ++i ) #define clr( x

BZOJ 1618: [Usaco2008 Nov]Buying Hay 购买干草( dp )

无限背包dp.. 因为题目中说至少到 H 磅 , 我就直接把 H * 2 了.. -------------------------------------------------------------------------- #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #define rep( i , n ) for( int i = 0 ; i &