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