[USACO08NOV]时间管理Time Management(排序,贪心)
题目描述
作为一名忙碌的商人,约翰知道必须高效地安排他的时间.他有N工作要 做,比如给奶牛挤奶,清洗牛棚,修理栅栏之类的.
为了高效,列出了所有工作的清单.第i分工作需要T_i单位的时间来完成,而 且必须在S_i或之前完成.现在是0时刻.约翰做一份工作必须直到做完才能停 止.
所有的商人都喜欢睡懒觉.请帮约翰计算他最迟什么时候开始工作,可以让所有工作按时完成.(如果无法完成全部任务,输出-1)
输入输出格式
输入格式:
* Line 1: A single integer: N
* Lines 2..N+1: Line i+1 contains two space-separated integers: T_i and S_i
输出格式:
* Line 1: The latest time Farmer John can start working or -1 if Farmer John cannot finish all the jobs on time.
说明
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.
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.
思路:
一道大水题,然而我还是错了……
我们知道他的持续时间和结束时间,那么我们肯定要在结束之前完成所有(否则输出-1)
所以我们按照结束时间排序
因为题目让你求最晚什么时候开始,所以我们尽可能地将任务往后放
对应过来就是从最大的开始,时光倒流
用一个time指针维护上一个开始的时刻
如果time比当前一个的结束点早,那么当前一个的实际结束点就是time
反之实际结束点就是最晚结束点
o(n)扫一遍即可
加上排序时间复杂度总共是O(nlogn+n)
很优化
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#define rii register int i
using namespace std;
struct deal{
int keep,start,last;
}x[];
int n,time;
bool cmp(deal ltt,deal kkk)
{
return ltt.last>kkk.last;
}
int main()
{
// freopen("manage.in","r",stdin);
// freopen("manage.out","w",stdout);
scanf("%d",&n);
for(rii=;i<=n;i++)
{
scanf("%d%d",&x[i].keep,&x[i].last);
x[i].start=x[i].last-x[i].keep;
}
sort(x+,x+n+,cmp);
time=x[].start;
for(rii=;i<=n;i++)
{
if(x[i].last<time)
{
time=x[i].start;
}
else
{
time=time-x[i].keep;
}
}
if(time<)
{
printf("-1");
return ;
}
printf("%d",time);
return ;
}
[USACO08NOV]时间管理Time Management(排序,贪心)的更多相关文章
- bzoj1620 / P2920 [USACO08NOV]时间管理Time Management
P2920 [USACO08NOV]时间管理Time Management 显然的贪心. 按deadline从大到小排序,然后依次填充时间. 最后时间为负的话那么就是无解 #include<io ...
- P2920 [USACO08NOV]时间管理Time Management
P2920 [USACO08NOV]时间管理Time Management 题目描述 Ever the maturing businessman, Farmer John realizes that ...
- 题解 P2920 【[USACO08NOV]时间管理Time Management】
题面 作为一名忙碌的商人,约翰知道必须高效地安排他的时间.他有N工作要 做,比如给奶牛挤奶,清洗牛棚,修理栅栏之类的. 为了高效,列出了所有工作的清单.第i分工作需要T_i单位的时间来完成,而 且必须 ...
- [USACO08NOV]时间管理Time Management
题目描述 Ever the maturing businessman, Farmer John realizes that he must manage his time effectively. H ...
- 洛谷 P2920 [USACO08NOV]时间管理Time Management
传送门 题目大意: 每个工作有截至时间和耗费时间,n个工作求最小开始时间. 题解: 贪心 从n-1安排,让结束时间尽量的晚. 注意:优先级 cout<<st<0?-1:st; (X ...
- [LUOGU] P2920 [USACO08NOV]时间管理Time Management
见7.3测试 #include<iostream> #include<algorithm> #include<cstdio> using namespace std ...
- CMSIS-RTOS 时间管理之时间延迟Time Delay
时间管理 Time Management 此RTOS除了可以把你的应用代码作为线程运行,它还可以提供一些时间服务功能,使用这些功能你就可以访问RTOS的一些系统调用. 时间延迟Time Delay 在 ...
- 1620: [Usaco2008 Nov]Time Management 时间管理
1620: [Usaco2008 Nov]Time Management 时间管理 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 506 Solved: ...
- BZOJ 1620: [Usaco2008 Nov]Time Management 时间管理( 二分答案 )
二分一下答案就好了... --------------------------------------------------------------------------------------- ...
随机推荐
- 洛谷P1966 火柴排队(逆序对)
题意 题目链接 Sol 不算很难的一道题 首先要保证权值最小,不难想到一种贪心策略,即把两个序列中rank相同的数放到同一个位置 证明也比较trivial.假设\(A\)中有两个元素\(a, b\), ...
- angular2-模块
Angular模块 (NgModule) Angular 模块是带有 @NgModule 装饰器函数的类. @NgModule接收一个元数据对象,该对象告诉 Angular 如何编译和运行模块代码. ...
- linux C之判断文件或目录是否存在 access函数
http://blog.sina.com.cn/s/blog_6a1837e90100uh5d.html access():判断是否具有存取文件的权限 相关函数 stat,open,chmod, ...
- conversion vs recommendation
conversion vs recommendation: http://markdisomma.com/2011/06/16/conversation-vs-recommendation/
- 使用canvas来绘制折线图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Tcpdump usage examples
In most cases you will need root permission to be able to capture packets on an interface. Using tcp ...
- 【Leetcode】【Easy】Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- VueJS 使用i18n做国际化切换中英文
1.安装 npm install vue-i18n --save 2.创建存放语言包和i18n入口文件 a.在src下创建i18n目录 b.在src/i18n/创建i18n.js (入口) c.在s ...
- [原]C++ double 小数精度控制
第一种方法:cout<<fixed<<setprecision(20)<<mydouble<<endl; #include <iostream&g ...
- BZOJ1820:[JSOI2010]Express Service 快递服务(DP)
Description 「飞奔」快递公司成立之后,已经分别与市内许多中小企业公司签订邮件收送服务契约.由于有些公司是在同一栋大楼内,所以「飞奔」公司收件的地点(收件点)最多只有m点 (1, 2, …, ...