题目大意

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. 更改gradle的java的class文件输出目录的结构

    group 'com.thinkvenus.common'version '1.0-SNAPSHOT' apply plugin: 'java' sourceCompatibility = 1.8 r ...

  2. 【BZOJ】1176: [Balkan2007]Mokia

    [题意]n*n的矩阵,初始值为0(题面有误),m次操作,增加一个格子的权值,或查询子矩阵和.n<=2*10^6.(m应该较题面所述偏大). [算法]CDQ分治(算法知识见数据结构) [题解]三维 ...

  3. python-cookbook读书笔记

    今天开始读<python-cookbook>,书里有许多python优雅的写法,可以作为python的一本进阶书. 感谢译者.项目地址: https://github.com/yidao6 ...

  4. VC字体对话框的初始化

    本代码需要先添加类成员  LOGFONT lf; void CMyDlg::OnButton3() { // TODO: Add your control notification handler c ...

  5. 项目记录 -- config2html 理解

    html 代码: <table width=1280 border=0 cellspacing=1 cellpadding=1> <tr id=tblhdr> <td&g ...

  6. python进阶之关键字和运算符触发魔法方法

    前言 python有众多的魔法方法,它们会在满足某种条件下触发执行,掌握好魔法方法的使用,可以加快程序的运行效率,同时减少逻辑调用. 关键字与魔法方法 python的一些魔法方法是关键字触发的,即py ...

  7. 谁说运维用ELK没用?我就说很有用,只是你之前不会用【转】

    1.安装JDK 1)登陆ORACLE官网 (http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html ...

  8. 用Centos7搭建小微企业Samba文件共享服务器【转】

    转自 用Centos7搭建小微企业Samba文件共享服务器 - 今日头条(www.toutiao.com)http://www.toutiao.com/i6436937837660078593/ 最近 ...

  9. 56.Merge Intervals---贪心---《编程之美》2.19区间重合判断

    题目链接:https://leetcode.com/problems/merge-intervals/description/ 题目大意:给出一串list,里面装interval类,这个类里有star ...

  10. MAC 文件被锁定

    从windows拷贝到MAC的文件,有时候会被锁定.右键-简介-已锁定也是灰色的,无法取消: xattr -l 文件名 xattr -d com.apple.FinderInfo 文件名