2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线。玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿。但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪明。请返回最后获胜者的分数。

福哥答案2021-02-15:
这道题直接背,用自然智慧很难想到,平时需要锻炼敏感度。
1.递归。有代码。
先手 依赖 后手递归加数组元素的最大值。
后手 依赖 先手递归的最小值。
为了方便记忆,先手选大的,后手被迫选小的。实际上,先手和后手都是尽自己的努力选大的。这表面上看起来是违背了自然智慧的。
2.动态规划。有代码。
先手dp依赖【后手左】和【后手下】。
后手dp依赖【先手左】和【先手下】。

代码用golang编写,代码如下:

package mainimport "fmt"func main() {ret := win1([]int{5, 7, 4, 5, 8, 1})fmt.Println("1.递归:", ret)ret = win2([]int{5, 7, 4, 5, 8, 1})fmt.Println("2.动态规划:", ret)
}// 根据规则,返回获胜者的分数
func win1(arr []int) int {if len(arr) == 0 {return 0}first := f1(arr, 0, len(arr)-1)second := g1(arr, 0, len(arr)-1)return getMax(first, second)
}// arr[L..R],先手获得的最好分数返回
func f1(arr []int, L int, R int) int {if L == R {return arr[L]}p1 := arr[L] + g1(arr, L+1, R)p2 := arr[R] + g1(arr, L, R-1)return getMax(p1, p2)
}// // arr[L..R],后手获得的最好分数返回
func g1(arr []int, L int, R int) int {//if L == R {//  return arr[L]//}//p1 := arr[L] + f1(arr, L+1, R)//p2 := arr[R] + f1(arr, L, R-1)//return getMin(p1, p2)if L == R {return 0}p1 := f1(arr, L+1, R) // 对手拿走了L位置的数p2 := f1(arr, L, R-1) // 对手拿走了R位置的数return getMin(p1, p2)
}func win2(arr []int) int {if len(arr) == 0 {return 0}N := len(arr)fmap := make([][]int, N)gmap := make([][]int, N)for i := 0; i < N; i++ {fmap[i] = make([]int, N)gmap[i] = make([]int, N)}for i := 0; i < N; i++ {fmap[i][i] = arr[i]}for startCol := 1; startCol < N; startCol++ {L := 0R := startColfor R < N {fmap[L][R] = getMax(arr[L]+gmap[L+1][R], arr[R]+gmap[L][R-1])gmap[L][R] = getMin(fmap[L+1][R], fmap[L][R-1])L++R++}}return getMax(fmap[0][N-1], gmap[0][N-1])
}func getMax(a int, b int) int {if a > b {return a} else {return b}
}
func getMin(a int, b int) int {if a < b {return a} else {return b}
}

执行结果如下:


左神java代码
评论

2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线。玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿。但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪相关推荐

  1. 给定一个整型数组arr,代表数值不同的纸牌排成一条线。玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,然后B后拿,但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪明。求最后获胜者的分数

    题目:给定一个整型数组arr,代表数值不同的纸牌排成一条线.玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿,但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪明.请返回最后获 ...

  2. 2021-04-17:给定一个整型数组 arr,数组中的每个值都为正数,表示完成一幅画作需要的时间,再 给定 一个整数 num,表示画匠的数量,每个画匠只能画连在一起的画作。所有的画家 并行工作,请

    2021-04-17:给定一个整型数组 arr,数组中的每个值都为正数,表示完成一幅画作需要的时间,再 给定 一个整数 num,表示画匠的数量,每个画匠只能画连在一起的画作.所有的画家 并行工作,请 ...

  3. 2014年去哪儿网笔试题--给定一个整型数组,对这个整型素组排序,使得按序拼接数组各元素得到的值最小

    2014年去哪儿网笔试题--给定一个整型数组,对这个整型素组排序,使得按序拼接数组各元素得到的值最小. 我的大致思路是把这个整型数组转换成String数组,然后通过String类的compareTo方 ...

  4. 输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)

    输入一个整型数组,数组里有正数也有负数.数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n).(奇安信-wab前端) 例如,输入的数组为{ 1.-2.3.10. ...

  5. 奇偶数分离c语言,如何把一个整型数组中,奇数偶数进行分离 怎么使数组进行奇偶奇偶相间排序...

    导航:网站首页 > 如何把一个整型数组中,奇数偶数进行分离 怎么使数组进行奇偶奇偶相间排序 如何把一个整型数组中,奇数偶数进行分离 怎么使数组进行奇偶奇偶相间排序 相关问题: 匿名网友: imp ...

  6. c语言学习-定义一个整型数组a[10],将数组a[10]中的10个元素按逆序重新存放

    定义一个整型数组a[10],将数组a[10]中的10个元素按逆序重新存放 程序流程图: 代码: #include<stdio.h> void main() { int a[10]; int ...

  7. C语言编程>第六周 ① 编写一个录入函数:用来从键盘接收n个整型数并存放在一个整型数组中。 在主函数中调用该函数计算出这n个整数之和。

    例题:编写一个录入函数:用来从键盘接收n个整型数并存放在一个整型数组中. 在主函数中调用该函数计算出这n个整数之和. 代码如下: /*代码分析:录入函数需要两个参数:一个参数是需要用来存储数字的数组, ...

  8. int java 声明_怎样用java定义一个int数组 C++ 怎么声明一个整型数组?

    导航:网站首页 > 怎样用java定义一个int数组 C++ 怎么声明一个整型数组? 怎样用java定义一个int数组 C++ 怎么声明一个整型数组? 相关问题: 匿名网友: int[] anA ...

  9. C语言编程练习 1.按如下函数原型编写程序,用一个整型数组feedback保存调查的40个反馈意见。用函数编程计算反馈意见的平均数(Mean)、中位数(Median)和众数(Mode

    题目完整描述: 按如下函数原型编写程序,用一个整型数组feedback保存调查的40个反馈意见.用函数编程计算反馈意见的平均数(Mean).中位数(Median)和众数(Mode).中位数指的是排列在 ...

最新文章

  1. css3制作一个漂亮的按钮
  2. python声明_在Python中什么是全局声明?
  3. cocos2d python文档_【Cocos2D-X 学习笔记】Cocos2D-x 3.0+VS开发环境搭建[使用Python]
  4. [python] 安装numpy+scipy+matlotlib+scikit-learn及问题解决
  5. java线程池笔记及相关代码
  6. php去掉多字节字符,PHP 面试题 - 如果没有 mb 系列函数,如何切割多字节字符串...
  7. JavaScript中的地图与对象
  8. c语言c98标准,1.3.2 C语言标准
  9. crontab定时任务不生效问题解决
  10. 人生聚散,一切随缘!
  11. Mac软件损坏,无法打开,允许任何来源后依旧损坏
  12. Vue二次封装axios为插件使用
  13. 碗中有米,心中有他,他解决的不只是吃饭问题......
  14. [转] 如何用BSP树生成游戏地图
  15. 使用计算机有关的活动,与计算机有关的传统文化活动策划书
  16. Android FrameWork学习(一)Android 7.0系统源码下载\编译
  17. 计算机老师给新生的第一堂课怎么讲,新老师如何讲好第一堂课?看这篇就够了!...
  18. Python之数据分析总结
  19. 2021 广工 Anyview 数据结构第 5 章
  20. 【论文】Believe It or Not, We Know What You Are Looking at! 阅读笔记

热门文章

  1. 读曾鸣的《智能商业》有感
  2. redis之hkeys、hvals、hgetall的使用
  3. 集合位置(洛谷 P1491)
  4. 计算机打开共享网络连接打印机共享打印机,两台电脑如何共享打印机 多台电脑共享一台打印机设置方法【详细教程】...
  5. python写入csv文件中添加行_在python中为csv文件输出键添加值
  6. 【错误汇总】PYTHON开发
  7. STM32 CubeMX学习:7. ADC模数转化
  8. MATLAB命令大全和矩阵操作大全
  9. Android基础教程(十)build.gradle文件
  10. win7修改本计算机端口,如何更改Windows7 的远程桌面端口3389