如题 :
A、B两伙马贼意外地在一片沙漠中发现了一处金矿,双方都想独占金矿,但各自的实力都不足以吞下对方,经过谈判后,双方同意用一个公平的方式来处理这片金矿。处理的规则如下:他们把整个金矿分成n段,由A、B开始轮流从最左端或最右端占据一段,直到分完为止。
马贼A想提前知道他们能分到多少金子,因此请你帮忙计算他们最后各自拥有多少金子?(两伙马贼均会采取对己方有利的策略)
解题思路 :运用动态规划的算法思想求解最优解往往是有效的,动态规划与分治法的区别在于动态规划保存了先前的值,这里我们构建一个二维数组dp用来保存
dp[x][y] -> 第x堆到第y堆的最优解,即含金量最高
min(dp[i+1][j],dp[i][j+1]) -> 下一个人拿到的最少的金矿
初始条件:dp[i][i]=a[i] //每一堆的金矿数
具体代码实现如下: