有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 }