纸牌均分问题

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值