• hihoCoder #1695 公平分队II


    题目大意

    Alice 和 Bob 在玩一个游戏。Alice 将 $1$ 到 $2n$ 这 $2n$ 个整数分成两组,每组 $n$ 个。Bob 从中选一组,剩下一组归 Alice。Alice 可以与 Bob 交换一个数也可以不换。游戏目标是使自己所得的 $n$ 个数之和最大。两人都足够聪明,试问 Alice 所得的 $n$ 个数之和是多少?

    解法

    写这篇随笔是为了总结一下这一类问题该从哪里入手进行分析。

    这道博弈题和很久以前遇到的春游计划那道题一样,解法是倒推
    key observation:【 Bob 必定会选择最优的那一组数(选法也许不唯一)】

    记 Alice 选的 $n$ 个数为 $a_1< a_2 < ldots < a_n$, Bob 选的为 $b_1 < b_2 < ldots < b_n$ 。

    若 Alice 不必与 Bob 交换一个数,即有 $a_1 > b_n$,那么此时 Bob 选的 $n$ 个数为 $1, 2, 3, ldots, n$;然而这是最差的结果;换言之,若Bob 选另外 $n$ 个数,其结果必然不比此结果差,从而此种情况不可能出现,所以 Alice 必定会拿 $a_1$ 交换 $b_n$。根据 Bob 会在二者中取最优者,我们有
    [
    a_1 + sum_{1le i < n} b_i ge b_1 + sum_{1le i<n} a_i
    ]

    egin{equation}
    sum_{2le i le n-1} b_i - ai ge 0 qquad (nge 2) label{condition}
    end{equation}

    为了方便,我们将 eqref{condition} 式左边记做 $Delta$,将 $1$ 到 $2n$ 的和记做 $S$,将 Alice 所得的 $n$ 个数之和记为 $S_A$,即
    [
    S_A = b_n + sum_{2le ile n} a_i
    ]
    现在问题转化为

    Alice 如何分组才能在满足 eqref{condition} 式的前提下使得 $S_A$ 最大?

    我们有
    [
    S_A = (S -Delta + a_n + b_n - a_1 - b_1)/2
    ]

    观察可知,对于 $nge 2$,若 $n$ 为偶数,$a_n$、$b_n$ 取最大的两个数,$a_1$、$b_1$ 取最小的两个数,$Delta$ 的值可取到 $0$;当 $n$ 为奇数时,同样使 $a_n$、$b_n$ 取最大的两个数,$a_1$、$b_1$ 取最小的两个数,此时 $Delta$ 的值可取到 $1$,并且这是此时的最优结果,理由是:当且仅当按上述方法取值时,$a_n + b_n - a_1 - b_1$ 的值最大。

  • 相关阅读:
    Unity给力插件之MegaFiers
    序列化存档之备忘脚本
    09 Spring Cloud的集群保护框架Hystrix
    08 在Spring Cloud中使用Feign
    07 REST客户端
    06 RestTemplate负载均衡
    05 第一个Ribbon程序
    04 Ribbon介绍
    01 在IDEA的同一目录下创建多个项目
    03 Eureka集群的搭建
  • 原文地址:https://www.cnblogs.com/Patt/p/8590297.html
Copyright © 2020-2023  润新知