分金币 Uva 11300
題意
給定N個人成環(huán)狀坐,每個人初始分配Ai的金幣,金幣總數(shù)可以被N整除,每個人可以給左右相鄰的人一定數(shù)量的金幣使得最終每個人的金幣數(shù)量相同,求轉移數(shù)量最小的方案所轉移的總金幣數(shù)量。
N<=1000000
對每組數(shù)據(jù)保證輸出在INT64范圍之內(nèi)。
?
1.最終每個人擁有的金幣可以直接確定,設為M
2.設xi表示第i個人從上一個人手中獲得的金幣,若為負則標識它會給上一個人金幣,注意x1是從第n個人手中獲得金幣的數(shù)量
3.我們的目標是使得 |x1|? + |x2| + ... |xn| 最小,并且使它可以以單變量表示
?
列出方程組
a1 + x1 - x2 = m
a2 + x2 - x3 = m
...
an + xn - x1 = m
轉化得
x1 = m + x2 - a1
x2 = m + x3 - a2
...
xn-2 = m + xn-1 - an-2
xn-1 = m + xn - an-1
xn = xn
?
則有
xn-1 = xn - (an-1 - m)
xn-2 = xn-1? - (an-2 - m) = xn - (an-1 - m) - (an-2 - m)
xn-3 = ... = xn - (an-1 - m) - (an-2 - m) - (an-3 - m)
..
x1 = xn - (an-1 - m) - ... - (a1 - m)
引入數(shù)列Ci
Cn-1 = an-1 - m
Ck = Ck+1 + (ak - m)
所以
xn-1 = xn - Cn-1
xn-2 = xn - Cn-2
..
x1 = xn - C1
所以最終要求的就是|xn - C1| + |xn - C2| ... |xn - Cn-1| + |xn|
轉化為物理意義,就是0,C1..Cn-1的數(shù)軸上,選取一個點,使得它到所有點的距離之和最小。
可證,為這些數(shù)的中位數(shù)。
轉載于:https://www.cnblogs.com/dandi/p/4590592.html
總結
以上是生活随笔為你收集整理的分金币 Uva 11300的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web前端的优点有哪些?为什么Web前端
- 下一篇: Idea导出项目jar包