(博弈型动态规划+区间型动态规划)lintcode困难396 · 硬币排成线 III

博弈型动态规划+区间型动态规划
摘要由CSDN通过智能技术生成

题目

描述
有 n 个硬币排成一条线, 第 i 枚硬币的价值为 values[i].

两个参赛者轮流从任意一边取一枚硬币, 直到没有硬币为止. 拿到硬币总价值更高的获胜.

请判定 第一个玩家 会赢还是会输.

样例

样例 1:
输入: [3, 2, 2]
输出: true
解释: 第一个玩家在刚开始的时候拿走 3, 然后两个人分别拿到一枚 2.

样例 2:
输入: [1, 20, 4]
输出: false
解释: 无论第一个玩家在第一轮拿走 1 还是 4, 第二个玩家都可以拿到 20.

分析

看完题目就知道这一道博弈型的动态规划,接下来分析先手的必胜条件,博弈型的动态规划,我们只需要分析先手就可以,正常来说先手完成一步后到了后手,这时我们要把后手当成现在的“先手”
举例

这种情况下就是先手必胜,先手选了1后无论后手选3或者2,先手都可以选到257,但是如果我们作为先手应该先选左边的还是右边的呢,这个时候我们就要看中间的数字3和257,如果我们想要3,就可以选择2然后无论后手怎么选,我们都能拿到3
如果是一个Arr[n]的数组时我们也是一样,先手选择第一个时,需要知道Arr[n-1]内的情况,所以这道题也是一道区间型的动态规划

先手要做到什么?后手要做到什么情况?
假设先手拿到的数字和为A,后手拿到的数字和B 那对先手来说A-B>=0先手就赢了,反之对后手来说B-A>=0就赢了,所以先手要做到使A-B尽可能地大,后手要做到B-A尽可能的大

状态f[i][j]为先手在i,j区间能拿到的最大差值,得到转移方程f[i][j]=max(A[i]-f[i+1]f[j],A[j]-f[i][j-1]).
解释:先手的有两种情况拿左边的或者是拿右边的,先手拿了左边的后后手面对的就是f[i+1][j],这时先手的最大差值就是当前拿走的这个A[i]减去f[i+1][j],因为B的要做的最大化B-A的值,就相当于A[i]-(B-A)

完整

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

White boy&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值