zoukankan      html  css  js  c++  java
  • 分金币 Uva 11300

    题意

    给定N个人成环状坐,每个人初始分配Ai的金币,金币总数可以被N整除,每个人可以给左右相邻的人一定数量的金币使得最终每个人的金币数量相同,求转移数量最小的方案所转移的总金币数量。

    N<=1000000

    对每组数据保证输出在INT64范围之内。

    1.最终每个人拥有的金币可以直接确定,设为M

    2.设xi表示第i个人从上一个人手中获得的金币,若为负则标识它会给上一个人金币,注意x1是从第n个人手中获得金币的数量

    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)

    引入数列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的数轴上,选取一个点,使得它到所有点的距离之和最小。

    可证,为这些数的中位数。

  • 相关阅读:
    linux用户与组管理
    历史轨迹
    win10右击菜单在左边
    uwp使用资源限定符Devicefamily不同设备使用不同布局
    uwp通用应用重写列表面板控件
    uwp通用应用布局触发器AdaptiveTrigger
    ci的一些基础内容
    ci的控制器视图模型
    ci的url操作
    baidupcs-go命令
  • 原文地址:https://www.cnblogs.com/dandi/p/4590592.html
Copyright © 2011-2022 走看看