题面

作为一名忙碌的商人,约翰知道必须高效地安排他的时间.他有N工作要 做,比如给奶牛挤奶,清洗牛棚,修理栅栏之类的.

为了高效,列出了所有工作的清单.第i分工作需要T_i单位的时间来完成,而 且必须在S_i或之前完成.现在是0时刻.约翰做一份工作必须直到做完才能停 止.

所有的商人都喜欢睡懒觉.请帮约翰计算他最迟什么时候开始工作,可以让所有工作按时完成.(如果无法完成全部任务,输出-1)

题意

有一个人有N项工作,给N组数据,每组数据有Ti和Si,分别表示第i组工作需要花费的时间和最晚完成的时间。

初始时间为0,要求算出最晚可以什么时间开始工作。

题解

50分操作 (有BUG 不严谨证明)

由题意可以知道这道题可以尝试以下模拟操作。

  1. 排序每一项最晚完成的时间。

  2. 枚举,如果前i项任务完成时间超过第i项任务花费的时间,就非法,输出-1。

  3. 统计出每一项任务 最晚完成时间 - 花费时间的值。

  4. 排序输出最小的统计值。 (不完全归纳法得出3、4操作,不严谨证明)

#include<bits/stdc++.h>
using namespace std; int n = 0,tong[1010]; struct edge{
int t,s;
bool operator < (const edge &qxq)
{
return s < qxq.s;
}
}num[1010]; int main(int argc, char const *argv[])
{
cin >> n; for(int i = 1;i <= n;i++)
{
cin >> num[i].t >> num[i].s;
if(num[i].t > num[i].s)
{
cout << -1;
return 0;
}
tong[i] = num[i].s - num[i].t;
} sort(num+1,num+n+1);
sort(tong+1,tong+n+1); long long sum = 0;
for(int i = 1;i <= n;i++)
{
sum += num[i].t;
if(sum > num[i].s)
{
cout << -1;
return 0;
}
} cout << tong[1]; return 0;
}

满分做法 AC100

建立在50分的操作上进行严谨的贪心证明。

  1. 排序每一项最晚完成的时间。

  2. 得出最晚完成的时间,并用一个中间变量存储。

  3. 枚举,用中间变量减去每一项所要花费的时间。

  4. 对结果进行判断,如果中间变量小于0,非法,输出-1;否则中间变量剩余的时间就是答案,也就是商人最晚起床时间。

#include<bits/stdc++.h>
using namespace std; int n = 0; struct edge{
int t,s;
bool operator < (const edge &qxq)
{
return s > qxq.s;
}
}num[1010]; int main(int argc, char const *argv[])
{
cin >> n; for(int i = 1;i <= n;i++)
{
cin >> num[i].t >> num[i].s;
} sort(num+1,num+n+1); int ans = num[1].s;
for(int i = 1;i <= n;i++)
{
if(ans <= num[i].s) ans -= num[i].t;
else ans = num[i].s - num[i].t;
} if(ans < 0) cout << "-1"; else cout << ans; return 0;
}

题解 P2920 【[USACO08NOV]时间管理Time Management】的更多相关文章

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

    P2920 [USACO08NOV]时间管理Time Management 显然的贪心. 按deadline从大到小排序,然后依次填充时间. 最后时间为负的话那么就是无解 #include<io ...

  2. P2920 [USACO08NOV]时间管理Time Management

    P2920 [USACO08NOV]时间管理Time Management 题目描述 Ever the maturing businessman, Farmer John realizes that ...

  3. 洛谷 P2920 [USACO08NOV]时间管理Time Management

    传送门 题目大意: 每个工作有截至时间和耗费时间,n个工作求最小开始时间. 题解: 贪心 从n-1安排,让结束时间尽量的晚. 注意:优先级 cout<<st<0?-1:st;  (X ...

  4. [LUOGU] P2920 [USACO08NOV]时间管理Time Management

    见7.3测试 #include<iostream> #include<algorithm> #include<cstdio> using namespace std ...

  5. [USACO08NOV]时间管理Time Management(排序,贪心)

    题目描述 作为一名忙碌的商人,约翰知道必须高效地安排他的时间.他有N工作要 做,比如给奶牛挤奶,清洗牛棚,修理栅栏之类的. 为了高效,列出了所有工作的清单.第i分工作需要T_i单位的时间来完成,而 且 ...

  6. [USACO08NOV]时间管理Time Management

    题目描述 Ever the maturing businessman, Farmer John realizes that he must manage his time effectively. H ...

  7. CMSIS-RTOS 时间管理之时间延迟Time Delay

    时间管理 Time Management 此RTOS除了可以把你的应用代码作为线程运行,它还可以提供一些时间服务功能,使用这些功能你就可以访问RTOS的一些系统调用. 时间延迟Time Delay 在 ...

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

    1620: [Usaco2008 Nov]Time Management 时间管理 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 506  Solved: ...

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

    二分一下答案就好了... --------------------------------------------------------------------------------------- ...

随机推荐

  1. ffplay源码分析7-播放控制

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10316225.html ffplay是FFmpeg工程自带的简单播放器,使用FFmpeg ...

  2. js闭包应用

    先来看一个例子: function foo() { var a = 10; function bar() { a *= 2; return a; } return bar; } var baz = f ...

  3. Nodejs+Express构建网站

    1.预先安装(系统环境widows): nodejs  可在官网下载安装  https://nodejs.org/en/ visual studio code  可在官网下载安装  http://co ...

  4. 转载-增删改查sql语句语法

    一.增:有2种方法 1.使用insert插入单行数据: 语法:insert [into] <表名> [列名] values <列值> 例:insert into Strdent ...

  5. tomcat学习步骤,附带打破双亲委派模型企业应用实战

    1. tomcat入门 入门模块仅做学习大纲梳理,忽略了具体操作指引. Tomcat的三种部署模式: 简单架构模型 连接器的非阻塞模式(NIO) 通道(Channel).缓冲区(Buffer).选择器 ...

  6. Oracle总结之plsql编程(基础七)

    紧接基础六,对oracle角色和权限的管理之后,在接下来的几次总结中来就最近工作中用过的plsql编程方面的知识进行总结,和大家分享! 原创作品,转自请注明出处:https://www.cnblogs ...

  7. 理解Java反射

    一.反射简介 Java让我们在运行时识别对象和类的信息,主要有2种方式:一种是传统的RTTI,它假定我们在编译时已经知道了所有的类型信息:另一种是反射机制,它允许我们在运行时发现和使用类的信息. 1. ...

  8. C++11 使用 std::async创建异步程序

    c++11中增加了线程,使得我们可以非常方便的创建线程,它的基本用法是这样的: void f(int n); std::thread t(f, n + 1); t.join(); 但是线程毕竟是属于比 ...

  9. 四种简单的sql语句(增删改查语句)

    四种简单的sql语句(增删改查语句) 一.插入语句 insert into [table] ([column],[column],[column]) values(?,?,?) 二.删除语句 dele ...

  10. php命令行生成与读取配置文件

    接着之前的文章:php根据命令行参数生成配置文件 ghostinit.php <?php class ghostinit{ static $v = 'ghost version is 1.1'; ...