【题目描述】
n个硬币排成一行, 每个硬币有一个价值Ci, 两个人轮流取硬币
规定每个人每次只能拿走剩余硬币中最左边或最右边的硬币, 若硬币全部取完, 游戏结束
求当两边都完美操作时先手能取得的硬币总和的最大值
思路:
区间dp
设d(l,r)为在区间[l,r]上的最优解, 则对手的最优解为d(l+1,r)和d(l,r-1)的最大值
那么就有d(l,r) = max(sum(l,r)-d(l+1,r),sum(l,r)-d(l,r-1))
即在对手剩下的局面中选择最优解
由于要求先手的最优解, 所以答案为d(1,n)
代码实现:
1 |
|