任务执行顺序 贪心
来源:互联网 发布:创维酷开如何安装软件 编辑:程序博客网 时间:2024/05/21 11:25
分析: 本题可以抽象成,从一个整数开始,每次减去a,再加上b (a,b都是正数),要求每次操作都不产生负数。
针对本题a[i] = R[i], b[i] = R[i] – O[i],注意O[i] < R[i],我们有0<b[i]<a[i]。 所以尽管每次有减有加,但是加的没有减的多,总数还是在不断见效的。关键我们是要“最有利”的一种执行顺序。大家可以尝试多种贪心策略。
我们给出标准答案——按照b[i]不增的顺序排序,是最“有利”的。
为了定义“有利”,我们这样证明我们的结论:
如果对于b[0]>=b[1] >=…>=b[x] < b[x + 1]
(a[0],b[0])….(a[x], b[x]) (a[x + 1], b[x + 1])的组合可以不产生负数,则我们交换b[x]和b[x + 1]也可以不产生负数。
证明:
交换(a[x], b[x])和(a[x + 1], b[x + 1])对x + 1更有利了,因为每个括号实际上是一个负数,所以越早安排这个括号,被减数就越大,就越不容易形成负数。
关键看(a[x],b[x])移动到后面会不会产生负数。
那其实是看之前的结果 -a[x + 1] + b[x + 1] – a[x]会不会产生负数,(注意-a[x + 1] + b[x + 1]不会产生负数,因为我们刚才已经证明了,对x + 1更有利)
而我们知道之前的结果-a[x] + b[x] – a[x + 1]不会产生负数(因为我们的假设就是这样),而b[x + 1] > b[x],所以前者更大,所以-a[x + 1] + b[x + 1] – a[x]不会产生负数。
因此我们证明了交换之后仍然不产生负数,也就是原先不产生负数,我们交换后仍然不产生负数。
而经过若干次这样的交换之后,我们肯定会把序列交换成按照b的不增顺序排序的。从而我们证明了,任何可行的方案都不好于按照b不增顺序排序的序列执行的方案,从而证明了我们的贪心策略是有效的。
很奇怪的策略——我们只考虑了b,居然能得到最优策略。可见贪心算法还是需要感觉,大胆假设,小心求证。
第1行:1个数N,表示任务的数量。(2 <= N <= 100000)第2 - N + 1行:每行2个数R[i]和O[i],分别为执行所需的空间和存储所需的空间。(1 <= O[i] < R[i] <= 10000)
输出执行所有任务所需要的最少空间。
2014 12 111 320 47 56 520 719 89 420 1018 1112 613 1214 915 216 1517 1519 1320 220 1
输出示例
135
以上文字来自51nod,解题代码如下
#include<stdio.h>#include<algorithm>using namespace std;struct S{int a,b;}s[100005];bool cmp(S x,S y){//if(x.a!=y.a) return x.a>y.a;return x.a-x.b>y.a-y.b;}int main(){int n;scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d%d",&s[i].a,&s[i].b);sort(s,s+n,cmp);int ans=0,now=0;for(int i=0;i<n;i++){if(now-s[i].a<0)ans+=s[i].a-now,now=s[i].a;now-=s[i].b;}printf("%d\n",ans);return 0;}
- 任务执行顺序 贪心
- 任务执行顺序 (贪心)
- 51nod 1099:任务执行顺序 贪心
- 51nod 1099:任务执行顺序 贪心
- 51nod 1099 任务执行顺序【贪心】
- 51nod1099 任务执行顺序(贪心)
- 1099任务执行顺序(贪心算法)
- 51nod 任务执行顺序 贪心
- 51nod 1099 任务执行顺序(贪心)
- 51nod 1099 任务执行顺序 贪心
- 51nod 1099 任务执行顺序(贪心)
- 51nod oj 1099 任务执行顺序 【贪心】
- 51nod 1099 任务执行顺序(贪心)
- 51NOD 贪心教程入门 任务执行顺序
- 51nod 1099 任务执行顺序(贪心)
- 51 nod 1099 任务执行顺序(贪心)
- 51nod 1099 任务执行顺序 贪心的构造方法
- 贪心算法基础之任务执行顺序 51nod 贪心教程
- 什么是跨域?怎么解决跨域问题?
- chrome 解析dns
- IOS9下使用微信内置浏览器数据请求无反应(纯H5应用)
- 与7无关的数
- python sklearn 机器学习库的安装
- 任务执行顺序 贪心
- Codeforces Round #392 (Div. 2)C Unfair Poll
- 创建与运行Ionic项目
- 2017 ICM/MCM F Migration to Mars: Utopian Workforce of the 2100 Urban Society
- 设计模式练习(11)——代理模式
- NodeJS简述-随手记
- ndk链接本地静态库注意事项
- 计算属性(computed)
- 高德地图开发日记