题目描述:
Fox Ciel is playing a card game with her friend Fox Jiro. There are n piles of cards on the table. And there is a positive integer on each card.
The players take turns and Ciel takes the first turn. In Ciel’s turn she takes a card from the top of any non-empty pile, and in Jiro’s turn he takes a card from the bottom of any non-empty pile. Each player wants to maximize the total sum of the cards he took. The game ends when all piles become empty.
Suppose Ciel and Jiro play optimally, what is the score of the game?
输入描述:
The first line contain an integer n (1 ≤ n ≤ 100). Each of the next n lines contains a description of the pile: the first integer in the line is si (1 ≤ si≤ 100) — the number of cards in the i-th pile; then follow si positive integers c1, c2, …, ck, …, csi (1 ≤ ck ≤ 1000) — the sequence of the numbers on the cards listed from top of the current pile to bottom of the pile.
输出描述:
Print two integers: the sum of Ciel’s cards and the sum of Jiro’s cards if they play optimally.
输入样例:
3
3 1 3 2
3 5 4 6
2 8 7
输出样例:
18 18
核心思想:
双方轮流拿,每次拿一个。
对于某一堆,如果某一个人要越过中间那一个去拿就意味着受到了权值大的卡牌的吸引。然而两人步长一样,那个权值大的卡牌会被另外一个人(离得近)先拿到,故得证两人无法越过中间线去拿卡牌。
对于某一堆,上一半的卡牌由Ciel拿到,下一半的卡牌由Jiro拿到,如果这一堆数量为奇数,则将正中间的一张牌加入数组b中。
最后将数组b排序,两人从大到小轮流拿牌。
代码如下:
#include<cstdio>
#include