任务执行顺序

来源:互联网 发布:手机淘宝付款过程 编辑:程序博客网 时间:2024/05/17 08:12

题目:https://cn.vjudge.net/contest/178387#problem/F

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

例如:执行需要5个空间,最后储存需要2个空间。给出N个任务执行和存储所需的空间,问执行所有任务最少需要多少空间。
思路:有很多不同存储内存的任务,你要同时兼顾执行内存和存储内存,尽量先执行执行内存大的和存储内存小的。有0.6B执行内存,0.3B存储内存的任务和0.9B,0.8B的任务,先执行0.6B的。如果差值很大的后面执行,可能在执行内存的时候需要很大,但存储时又需要很少,就很造成浪费。
#include<iostream>#include<algorithm>using namespace std;struct node {int sr, sto;}a[100000+5];bool cmp(node x, node y){return x.sr - x.sto > y.sr - y.sto;//按照差值排序}int main(){int n,minsum=0,i;while (cin >> n){minsum = 0;for (i = 0; i < n; i++){cin >> a[i].sr >> a[i].sto;minsum += a[i].sto;//最小总存储内存}sort(a, a + n, cmp);int cur = 0;//当前的存储内存for (i = 0; i < n; i++){if (a[i].sr+cur > minsum){minsum = a[i].sr + cur;}cur += a[i].sto;  }cout << minsum << endl;    }return 0;}

原创粉丝点击