今天在百度知道上看到有人问这样一道题:
描述
有n个任务需要依次运行,第i个任务运行时需要占R[i]的空间,运行完成后仍然残留O[i]的空间( O[i]<R[i])。现在需要合理安排这些任务,使得运行完这些任务的需要的空间最小。
例如说,有两个任务,R[1]=10,O[1]=5,R[2]=8,O[2]=6。
如果先运行第1个任务,再运行第2个任务,则总共最多需要13的空间;
如果先运行第2个任务,再运行第1个任务,则总共最多需要16的空间;
因此选择第一种方式,使得占用空间最小。
输入
每组数据第一行为任务数 n (n <= 30),接下来的 n 行分别是对应的 R[i] O[i]。
输入以 0 结尾。
输出
对每组数据,输出所需的内存。
样例输入
2
10 5
8 6
5
5 5
4 4
3 3
2 2
1 1
0
样例输出
13
15
我的解答思路是
设Wi=Ri-Oi。只有两个任务t1,t2时,需要空间为V,需要最小空间实际为Vm
设先执行t1再执行t2表示为t1->t2,先执行t2再执行t1表示为t2->t1
则当t1->t2时,有V1=R2-R1+2O1;当t2->t1时,V2=R1-R2+2O2。
那么
V(t1->t2)=Vm(t1->t2)&