题目在这里我就不再重复。
此题用了贪心算法,每次都取w[i]+s[i]值最大的放在下面。但是为什么这样做可以得到最优解?下面给出证明。
设最优排列时牛的编号由上至下为1,2,3,4....x-1,x+1, x. 其中w[1]+w[2]+...+w[x-2]=W, s[x]+w[x]<s[x+1]+w[x+1],
(也就是一头s[i]+w[i]大的牛没有在下边)
那么我们交换x和x+1的位置,由于x上方的牛的总重量减小,所以x的压力减小;现在x+1在最下面,它受的压力为
p1=W+w[x]-s[x+1]
之前x的压力为
p2=W+w[x+1]-s[x]
p1-p2<0
所以交换后的解没有变坏。
重复这样的过程可知,最优方案即是按s[i]+w[i]排序
PS. 开始没有想到交换相邻的两头牛,而是考虑了其他比较诡异的交换,结果没证出来。