纸牌均分问题

首先,如果有某序列\(a_i\),则\(\sum_{i=1}^n|a_i-k|\)取最小值时,k为\(a_i\)的中位数。(因为如果是pos,则pos向靠近中位数的位置移动能更小),这个性质也能dp

有n个人站成一排,每个人有\(a_i\)张纸牌,求最小移动次数使得每个人纸牌数一样,一张纸牌交给旁边的人记为一次移动。
如果tot是n的倍数,则有解,设t=tot/n
遍历一遍,对于第i个人,ans+=abs(a[i]-t),a[i+1]-=t-a[i]。
也就是:\(ans=|a_1-t|+|a_2+a_1-2t|+|a_3+a_2+a_1-3t|+\dots+|\sum_{i=1}^na_i-nt|\)
如果令\(s_k=(\sum_{i=1}^ka_i)-kt=\sum_{i=1}^k(a_i-t)\)
\(ans=\sum_{i=1}^n |s_i|\)
如果\(b_i=a_i-t\),答案就是b的n个前缀和的绝对值之和。

如果是n个人站成一圈,那么,必然有两个人之间是没有交换的,将这两个人断开,变成一条链,假设在位置p和p+1之间断开,且s是原序列的前缀和,则新的前缀和从p+1处开始:
\(|s_{p+1}-s_p|\)
\(|s_{p+2}-s_p|\)
\(\dots\)
\(|s_n-s_p|\)
\(|s_n+s_1-s_p|\)
\(\dots\)
\(|s_n+s_{p-1}-s_p|\)
\(|s_n+s_{p}-s_p|\)
如果s是b的前缀和,则\(s_n=0\)
\(ans=\sum_{i=1}^n|s_i-s_p|\),欲使ans最小,\(s_p\)为s的中位数

有n个人,第i个人站在\(x_i\)的位置,求使他们站成连续的一列的最小花费。
显然,每个人的相对位置不变,设最终他们站在点a、a+1、... a+n-1点,则花费
\(ans=\sum_{i=1}^n |x_i-(a+i-1)|=\sum_{i=1}^n |(x_i-i+1)-a|\),所以a是序列:
\(b_i=x_i-i-1\)的中位数。

posted @ 2020-12-19 22:55  肆之月  阅读(114)  评论(0编辑  收藏  举报