飞行棋问题
法1:纯递归

法2:记忆搜索


法3:严格表结构的动态规划
假设星号是目标点
每个格子的值等于左上角+右上角的值

零钱问题
给一个整数数组,代表零钱,给一个int,零钱凑成int,最少需要几个零钱

- 无效解应该设置-1不应该设0,0代表是有效的
- 没考虑重复的情况
严格表结构:


如果不求最少,有多少种方法

赢牌问题
一个数组,两个人依次拿牌,可以拿头或尾,求最大分值
常规情况


严格表结构

- f(arr, i, j)和s(arr, i, j)分别是先手和后手的情况,结果是max(f(arr, 0, arr.length-1), s(arr, 0, arr.length-1)),即两个五角星的位置
- f函数中i=j时,最大分值只有一个选择,即只能拿i位置牌
- 对于f中任意点,等于s表中对称点位置的左边和下边两个点的最大值(s表的值与之相反,对应代码常规情况)。由于f中对角线可以先知道,就可以交替计算

象棋问题
马(马走日)从(0,0)到(x,y)位置,必须走k步,棋盘大小是9X10,返回方法数

常规方法

严格表结构
变化的参数有三个: x, y, step

所有step层的数都只和step-1层相关

贪吃蛇问题
给定棋盘,可以上下左右走,越界则死亡,求生存概率
求方法数:

总方法数:
4
k
4^{k}
4k
本文探讨了不同游戏问题的解决策略,包括飞行棋的纯递归、记忆搜索和动态规划方法,零钱问题的优化解法,赢牌问题的先手与后手最佳策略,以及象棋中马的路径计数。此外,还涉及了贪吃蛇的生存概率计算问题,展示了一系列基于算法的解决方案。


1293

被折叠的 条评论
为什么被折叠?



