POJ3045 Cow Acrobats 贪心
2017-11-19 20:48
225 查看
很好的一道贪心练手题。
下面证明这个结论:
考虑相邻的两头牛i和i+1, i+1叠在i的下方, 如果w[i+1]+s[i+1] < w[i]+s[i];
设i上方牛的总重量为w0,那么有r[i] = w0 - s[i]; r[i+1] = w0 + w[i] - s[i+1] (r表示risk值)
如果我们将i和i+1互换,那么有r’[i] = w0 + w[i+1] - s[i]; r’[i+1] = w0 - s[i+1]
即r[i]变大了,r[i+1]变小了。
我们来比较下r[i+1]和r’[i]的大小:
r’[i] - r[i+1] = w[i+1] +s[i+1] - w[i] - s[i] < 0
即r[i+1] > r’[i] >= r[i]
所以max{r[i], r[i+1]} = r[i+1]
因为r[i+1] > r’[i], 且r[i+1] >= r’[i+1]
所以r[i+1] = max{r[i], r[i+1]} >= max{r’[i], r’[i+1]}
所以max{r[j] for all j} >=max{r’[j] for all j}
即,在i和i+1逆序的情况下,我们交换i和i+1,会得到同样优或者的结果。
这样经过若干次交换操作后,就得到一个升序序列,就是最后的答案。
题目大意
给出n头牛的体重w[i]和力量值s[i],然后要将他们在竖直方向上叠放在一起,每头牛的risk值是它头顶所有牛体重和减去它的力量值,求所有叠放次序中,牛的最大risk值的最小值。题解
贪心的思路很简单。答案就是将牛按照w[i]+s[i]排序,w[i]+s[i]大的牛叠在下面。下面证明这个结论:
考虑相邻的两头牛i和i+1, i+1叠在i的下方, 如果w[i+1]+s[i+1] < w[i]+s[i];
设i上方牛的总重量为w0,那么有r[i] = w0 - s[i]; r[i+1] = w0 + w[i] - s[i+1] (r表示risk值)
如果我们将i和i+1互换,那么有r’[i] = w0 + w[i+1] - s[i]; r’[i+1] = w0 - s[i+1]
即r[i]变大了,r[i+1]变小了。
我们来比较下r[i+1]和r’[i]的大小:
r’[i] - r[i+1] = w[i+1] +s[i+1] - w[i] - s[i] < 0
即r[i+1] > r’[i] >= r[i]
所以max{r[i], r[i+1]} = r[i+1]
因为r[i+1] > r’[i], 且r[i+1] >= r’[i+1]
所以r[i+1] = max{r[i], r[i+1]} >= max{r’[i], r’[i+1]}
所以max{r[j] for all j} >=max{r’[j] for all j}
即,在i和i+1逆序的情况下,我们交换i和i+1,会得到同样优或者的结果。
这样经过若干次交换操作后,就得到一个升序序列,就是最后的答案。
源代码
相关文章推荐
- POJ - 3045 Cow Acrobats (贪心)
- POJ --3045--Cow Acrobats(贪心模拟)
- POJ --3045--Cow Acrobats(贪心模拟)
- POJ 3045 - Cow Acrobats(贪心)
- [POJ 3045] Cow Acrobats (贪心)
- POJ 3045 Cow Acrobats(贪心 or 二分)
- POJ 3045 Cow Acrobats 贪心
- POJ 3045 Cow Acrobats 贪心
- poj 3045 Cow Acrobats 贪心
- poj 3045 Cow Acrobats (贪心)
- POJ - 3045 Cow Acrobats (二分,或者贪心)
- POJ 题目3045 Cow Acrobats(贪心)
- POJ 3045 Cow Acrobats (贪心)
- POJ 3045 Cow Acrobats 贪心\二分
- poj 3045 Cow Acrobats (贪心!!不是二分,)
- POJ - 3045 Cow Acrobats 贪心
- Greedy:Cow Acrobats(POJ 3045)
- poj3045 贪心
- poj 3045 Cow Acrobats 贪心
- poj 3045 Cow Acrobats