【2018.10.12】冥土追魂
题目描述
有一天 Misaka 和 Kuroko 在玩一个关于冥土追魂的游戏....
Misaka和Kuroko在一个 $n * m$ 的棋盘上玩游戏,每个格子上都放着一些呱太。游戏共进行 $k$ 回合,每一回合 Kuroko会选有呱太的一行 i,在这之后Misaka会选择一列 $j$ ,并拿走格子 $(i, j)$ 上的所有呱太,Misaka希望自己拿走的呱太尽可能多,而Kuroko不想让Misaka拿走很多呱太,所以她希望拿走的呱太尽可能少。
在一旁围观的恒温死神希望预测结果,请你预测在双方都采取最优策略的情况下,Misaka最终能拿走呱太的数量。
输入描述
第一行三个数 $n, m, k$。
接下来 $n$ 行,每行 $m$ 个数,第 $i$ 行第 $j$ 个数表示棋盘第 $i$ 行第 $j$ 列上的呱太数量 $a_{i,j}$。
输出描述
输出共一个数,表示在你的预测下,Misaka最终能拿走呱太的数量。
示例1
输入
3 2 4
5 7
3 2
8 5
输出
17
备注
$1≤ n, m ≤ 1000, 1 ≤ k ≤ n x m, 1 ≤ a_{i,j} ≤ 10^9$
题解
讲道理,这题现场WA的人可真多。
看懂题意,第一眼就能看出来是个贪心。
因为先选的人要让后取的人取到的数尽可能小,很容易想到每次取 剩余的数的最大值 最小的一行。
但直接交上去却WA了一波,一时没想通为啥错了。
后来找到了一组 hack 数据:
2 3 3
50 50 50
100 2 1
按照上述贪心做法的结果是150,即先选的人每次钦定第一行。
但如果三次都钦定第二行的话结果是103,反而更小。
为什么呢?第二行有个100挡着,导致第二行的数都不会被取到,而第二行剩下的两个数都是非常小的,也就是说 前面取的数大 不能决定后面取的数的大小。
也就是说取数操作对这一行有后效性,那就不能直接贪心了。
那能dp吗?$k\le 1000000$,二维dp早就上天了。
翻来覆去好像只能贪心啊……
那可能要推点结论。
回顾一下,由于当先选的人钦定一行时,后选的人肯定会选这行最大的那个数,
因此把每行的数排个序,每行肯定都是从前往后选的。
然后针对上面的 hack 数据,推出一个不知道对不对的结论:当$k\ge m$时,把一行的数选完,一定比不选完更优。
直观感觉是这样就解决一行的后效性了。
既然这样,为了让后选的人选的数的和尽量小,先选的人肯定要根据每行的和从小到大选。
那为什么这样是正确的呢?
考虑只要两行数的情况,并假设$k\ge$ 列长(也就是说能取完一行数),上一行所有数的的和小于下一行。
那取完上一行肯定是最优的。
原因是