任务执行顺序

有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)
输出
 
输出执行所有任务所需要的最少空间。
 
输入示例

20
14 1
2 1
11 3
20 4
7 5
6 5
20 7
19 8
9 4
20 10
18 11
12 6
13 12
14 9
15 2
16 15
17 15
19 13
20 2
20 1

输出示例

135

 贪心思想:当所有任务都分配完了之后,我们发现我们最少都需要每个

存储所需的空间之和,然后我们找一个相对差(执行所需的空间和存储所需的空间的差)最小的任务,加上相对差就是最值
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 const int maxn=100005;
 6 struct node{
 7     int l, r, cz;
 8 }a[maxn];
 9 bool cmp(node a, node b){
10     return a.cz<b.cz;
11 }
12 int main(){
13     int n, Min_cz;
14     long long ans=0;
15     cin >> n;
16     for(int i=0; i<n; i++){
17         cin>>a[i].l>>a[i].r;
18         ans+=a[i].r;
19         a[i].cz=a[i].l-a[i].r;
20     }
21     sort(a, a+n, cmp);
22     ans+=a[0].cz;    //直接加上最小差值
23     cout<<ans<<endl;
24 
25     return 0;
26 }
原文地址:https://www.cnblogs.com/ledoc/p/6559764.html