紙牌均分問題

首先,如果有某序列aia_i,則i=1naik\sum_{i=1}^n|a_i-k|取最小值時,k爲aia_i的中位數。(因爲如果是pos,則pos向靠近中位數的位置移動能更小),這個性質也能dp

有n個人站成一排,每個人有aia_i張紙牌,求最小移動次數使得每個人紙牌數一樣,一張紙牌交給旁邊的人記爲一次移動。
如果tot是n的倍數,則有解,設t=tot/n
遍歷一遍,對於第i個人,ans+=abs(a[i]-t),a[i+1]-=t-a[i]。
也就是:ans=a1t+a2+a12t+a3+a2+a13t++i=1naintans=|a_1-t|+|a_2+a_1-2t|+|a_3+a_2+a_1-3t|+\dots+|\sum_{i=1}^na_i-nt|
如果令sk=(i=1kai)kt=i=1k(ait)s_k=(\sum_{i=1}^ka_i)-kt=\sum_{i=1}^k(a_i-t)
ans=i=1nsians=\sum_{i=1}^n |s_i|
如果bi=aitb_i=a_i-t,答案就是b的n個前綴和的絕對值之和。

如果是n個人站成一圈,那麼,必然有兩個人之間是沒有交換的,將這兩個人斷開,變成一條鏈,假設在位置p和p+1之間斷開,且s是原序列的前綴和,則新的前綴和從p+1處開始:
sp+1sp|s_{p+1}-s_p|
sp+2sp|s_{p+2}-s_p|
\dots
snsp|s_n-s_p|
sn+s1sp|s_n+s_1-s_p|
\dots
sn+sp1sp|s_n+s_{p-1}-s_p|
sn+spsp|s_n+s_{p}-s_p|
如果s是b的前綴和,則sn=0s_n=0
ans=i=1nsispans=\sum_{i=1}^n|s_i-s_p|,欲使ans最小,sps_p爲s的中位數

有n個人,第i個人站在xix_i的位置,求使他們站成連續的一列的最小花費。
顯然,每個人的相對位置不變,設最終他們站在點a、a+1、… a+n-1點,則花費
ans=i=1nxi(a+i1)=i=1n(xii+1)aans=\sum_{i=1}^n |x_i-(a+i-1)|=\sum_{i=1}^n |(x_i-i+1)-a|,所以a是序列:
bi=xii1b_i=x_i-i-1的中位數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章