动态规划题解D005 纸牌博弈

题目解读

原题链接: 牛客网 2016校招真题在线编程

题目描述

有一个整型数组A,代表数值不同的纸牌排成一条线。玩家a和玩家b依次拿走每张纸牌,规定玩家a先拿,玩家B后拿,但是每个玩家每次只能拿走最左或最右的纸牌,玩家a和玩家b都绝顶聪明,他们总会采用最优策略。请返回最后获胜者的分数。
给定纸牌序列A及序列的大小n,请返回最后分数较高者得分数(相同则返回任意一个分数)。保证A中的元素均小于等于1000。且A的大小小于等于300

输入描述

[1,2,100,4],4

输出描述

101

题意理解

这是一条博弈题,题目中说明了A、B两个人不断取牌来计分的过程。注意这里有一个先手和后手转换的关系。A、B两个对象,既有做先手的时刻,又有做后手的时刻,比如对于序列1,2,100,4,在时刻1,对于该序列是A先手,而一旦A选取1后,在时刻2,对于序列2,100,4,A又变为了后手,因为此刻是由B来进行挑选。同理,B也有先手和后手的时刻。

算法分析

考虑到先手和后手的对应关系,我们设置两个数据结构
First[a][b]:表示对于字符串num[a]-num[b]采用先手能够取得的分数;
Second[a][b]:表示对于字符串num[a]-num[b]采用先手能够取得的分数;
那么First[a][b] = max(A[a]+S[a+1][b],A[b]+S[a][b-1]);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值