zoukankan      html  css  js  c++  java
  • 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$ 的值最大。

  • 相关阅读:
    convert image to base64 and post to RESTful wcf
    在android webview实现截屏的手动tounchmove裁剪图片
    How to use jquery ajax and android request security RESTful WCF
    using swfUpload in asp.net mvc
    using HttpClient and sending json data to RESTful server in adroind
    ODP.NET数据访问
    android image watermark
    解决国内不能访问github的问题
    idapro权威指南第二版阅读笔记第九章 交叉引用和绘图功能
    idapro权威指南第二版阅读笔记第二章 逆向和反汇编工具
  • 原文地址:https://www.cnblogs.com/Patt/p/8590297.html
Copyright © 2011-2022 走看看