题目大意

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_{1\le i < n} b_i \ge b_1 + \sum_{1\le i<n} a_i
\]

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

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

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

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

观察可知,对于 $n\ge 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$ 的值最大。

hihoCoder #1695 公平分队II的更多相关文章

  1. HihoCoder1653 : 公平分队([Offer收割]编程练习赛39)(贪心)

    描述 小Hi和小Ho在玩一个战争游戏.游戏中2N个战斗单位,其中第i个单位的战斗力是Ai. 现在小Hi和小Ho要各选N个单位组成队伍,当然他们都希望自己队伍的总战斗力越大越好. 为了使分队更加公平,经 ...

  2. hihocoder 1519 : 逃离迷宫II

    题目链接 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi被坏女巫抓进里一间有N x M个格子组成的矩阵迷宫. 有些格子是小Hi可以经过的,我们用'.'表示:有些格 ...

  3. HihoCoder - 1615矩阵游戏II(贪心)

    矩阵游戏II 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个NxN的整数矩阵,小Hi每次操作可以选择两列,将这两列中的所有数变成它的相反数. 小Hi可以进行任意 ...

  4. hihoCoder 1261 String Problem II

    时间限制:50000ms 单点时限:5000ms 内存限制:512MB 描写叙述 我们有一个字符串集合S,当中有N个两两不同的字符串.还有M个询问,每一个询问都会先给出一个字符串w,你须要回答下面三个 ...

  5. 【HIHOCODER 1604】股票价格II(堆)

    描述 小Hi最近在关注股票,为了计算股票可能的盈利,他获取了一只股票最近N天的价格A1~AN. 在小Hi的策略中,每天可以在下列三种操作中选取一种: 1.什么也不做: 2.按照当天的价格买进一个单位的 ...

  6. [hihicoder][Offer收割]编程练习赛47

    删除树节点 #pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h> #inclu ...

  7. CFA一级知识点总结

    更多来自:   www.vipcoursea.com   Ethics 部分 Objective of codes and standard:永远是为了maintain public trust in ...

  8. [Offer收割]编程练习赛39

    公平分队 #pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h> #includ ...

  9. 【hihoCoder 1454】【hiho挑战赛25】【坑】Rikka with Tree II

    http://hihocoder.com/problemset/problem/1454 调了好长时间,谜之WA... 等我以后学好dp再来看为什么吧,先弃坑(╯‵□′)╯︵┻━┻ #include& ...

随机推荐

  1. 【洛谷 P2865】 [USACO06NOV]路障Roadblocks(最短路)

    题目链接 次短路模板题. 对每个点记录最短路和严格次短路,然后就是维护次值的方法了. 和这题一样. #include <cstdio> #include <queue> #in ...

  2. HDU 1521 排列组合 (母函数)

    题目链接 Problem Description 有n种物品,并且知道每种物品的数量.要求从中选出m件物品的排列数.例如有两种物品A,B,并且数量都是1,从中选2件物品,则排列有"AB&qu ...

  3. 天梯赛 L2-012 关于堆的判断 (二叉树)

    将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: "x is the root":x是根结点: "x and y ar ...

  4. NYOJ 35 表达式求值 (字符串处理)

    题目链接 描述 ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能求出它的值的计算器,现在请你帮助他来实现这个计算器吧. 比如输入:&quo ...

  5. pycharm双击无响应,打不开问题解决办法

    之前好好的pycharm,突然双击打不开了,怎么办? 亲测有效方案: 第一步:进入如下路径,找到cmd.exe,右键选择“以管理员身份运行”: 第二步:在打开的cmd窗口中,输入 netsh wins ...

  6. 做Mysql主从时,注意使用replicate_wild_do_table和replicate-wild-ignore-table【转】

    做Mysql主从时,注意使用replicate_wild_do_table和replicate-wild-ignore-table 浓缩版: 使用replicate_do_db和replicate_i ...

  7. 013 GC机制

    本文转自:https://www.cnblogs.com/shudonghe/p/3457990.html 最近还是在找工作,在面试某移动互联网公司之前认为自己对Java的GC机制已经相当了解,其他面 ...

  8. c json实战引擎六 , 感觉还行

    前言 看到六, 自然有 一二三四五 ... 为什么还要写呢.  可能是它还需要活着 : ) 挣扎升级中 . c json 上面代码也存在于下面项目中(维护的最及时) structc json 这次版本 ...

  9. Ubuntu 10.04 分辨率调整

    最近学长们看了我的本本都在问我,显卡驱动是不是出现什么问题了···分辨率这么差.当时我的分辨率是1024X768,于是我就想修改我的屏幕分辨率改成1280X800.本来很简单的事情,我做起来却非常的曲 ...

  10. log优化

    isLoggable(Level level) 包含计算的日志记录用isLoggable判断下. debug  info warn   error   ,一般记录error,  但是其他里面的计算还是 ...