博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
贪心 :多任务执行
阅读量:4216 次
发布时间:2019-05-26

本文共 1306 字,大约阅读时间需要 4 分钟。

有N个任务需要执行,第i个任务计算时占R[i]个空间,而后会释放一部分,最后储存计算结果需要占据O[i]个空间(O[i] < R[i])。

例如:执行需要5个空间,最后储存需要2个空间。给出N个任务执行和存储所需的空间,问执行所有任务最少需要多少空间。
输入

第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

参考思路:
#include
#include
#define MAX 100000+5using namespace std;struct Node{ int ri,oi; bool operator<(const Node o)const { if(ri-oi == o.ri-o.oi){ return ri > o.ri; } else return ri-oi > o.ri-o.oi; }};struct Node nodes[MAX];int main() { int n; scanf("%d",&n); int sum = 0; for(int i = 0; i < n; ++i){ scanf("%d%d",&nodes[i].ri,&nodes[i].oi); sum += nodes[i].oi; } sort(nodes,nodes+n); int max_v = sum -nodes[n-1].oi+nodes[n-1].ri; //除最后的oi外的所有的oi时间加上 最后 一个ri 时间 构成总时间 printf("%d",max_v); return 0; }

大神代码:
一开始贪心的先执行R长的任务,计算总耗时但是WA了。

我们假设答案就是maxn,每次执行一个任务时总有充足的空间,那么执行第i个任务时需要至少ri的空间,结束后剩余ri-oi的空间用于剩下的任务,到最后一个任务时除去oi还剩下ri-oi的空间

所以答案就是 SUM{oi}+MIN{ri-oi};
#include
using namespace std;#define LL long longint main(){ int N,i,j,r,o; cin>>N; int s=0,minn=999999999; for(i=1;i<=N;++i) { scanf("%d%d",&r,&o); s+=o; minn=min(minn,r-o); } cout<
<

转载地址:http://vhimi.baihongyu.com/

你可能感兴趣的文章
为Android加入busybox工具
查看>>
使用技巧busybox
查看>>
如何查看与/dev/input目录下的event对应的设备
查看>>
bootloader-bootable解析
查看>>
bootloader (LK)&&android lk bootloader中相关修改指南
查看>>
SD卡驱动分析--基于高通平台
查看>>
SD Card 驱动流程分析
查看>>
Linux之debugfs介绍
查看>>
关于sd卡中一些概念的理解
查看>>
sd卡驱动分析之相关硬件操作和总结
查看>>
好的播文
查看>>
linux dd命令解析
查看>>
linux find命令详解
查看>>
S3C2440上touchscreen触摸屏驱动
查看>>
USB History Viewing
查看>>
怎样做可靠的分布式锁,Redlock 真的可行么?
查看>>
[图文] Seata AT 模式分布式事务源码分析
查看>>
pm 源码分析
查看>>
Sending the User to Another App
查看>>
kmsg_dump
查看>>