The game can be played by two or more than two players. It consists of a chessboard(棋盘)and some chessmen(棋子), and all chessmen are marked by a positive integer or “start” or “end”. The player starts from start-point and must jumps into end-point finally. In the course of jumping, the player will visit the chessmen in the path, but everyone must jumps from one chessman to another absolutely bigger (you can assume start-point is a minimum and end-point is a maximum.). And all players cannot go backwards. One jumping can go from a chessman to next, also can go across many chessmen, and even you can straightly get to end-point from start-point. Of course you get zero point in this situation. A player is a winner if and only if he can get a bigger score according to his jumping solution. Note that your score comes from the sum of value on the chessmen in you jumping path.
Your task is to output the maximum value according to the given chessmen list.

问题重述:1. 只能向前跳;2. 下一个数必须大于前一个数;3. 找序列和的最大值。

解题思路:
举个例子:[5, 4, 6, 3, 17, 10, 11]

假设以序列中的第1个数:5,作为起始点,那么满足条件的有:
第3个数:6
第5个数:17
第6个数:10
第7个数:11
也就是所,以第一个数作为起点,下一个点就只能是上述的4个点中的任意一个。

现在就可以将原问题分接为以下问题:


[6, 3, 17, 10, 11]  [17, 10, 11]  [10, 11]  [11]
这4个子序列中,找出以每个子序列的第1个数起点的最大子序列和。
到此,我们就已经将一个大问题分解成4个子问题。这样,反复迭代分解,就可以达到只有1个数的序列的情况,此时就可以停止分解,返回当前的这个数。
由于这个方法在执行过程中会进行大量的重复计算,所以为了避免重复计算,将中间的计算结果数据保存即可。
下面展示一些 内联代码片

goal_list = [5, 4, 6, 3, 17, 10, 11]
goal_dict = {}  # 保存中间结果def find_road(n):global goal_list, goal_dictif n == len(goal_list):return nmax_num = 0for x in range(n + 1, len(goal_list)):if goal_list[x] > goal_list[n]:if x not in goal_dict.keys():goal_dict[x] = find_road(x)max_num = max(goal_dict[x], max_num)return goal_list[n] + max_numprint(find_road(0))
print(goal_dict)

输出结果:
32
{4: 17, 6: 11, 5: 21, 2: 27}

import random
goal_list = [random.randint(1, 50) for _ in range(20)]
goal_dict = {}
print(goal_list)

输出结果:
[13, 50, 31, 10, 8, 3, 43, 26, 13, 40, 22, 22, 29, 37, 42, 14, 35, 14, 45, 16]

# 重新执行函数:
print(find_road(0))
print(goal_dict)

输出结果:
192
{1: 50, 18: 45, 6: 88, 14: 87, 9: 127, 13: 124, 16: 80, 2: 158, 12: 153, 7: 179, 10: 175, 11: 175, 19: 16, 15: 94, 17: 59}

跳棋游戏(求最大升序子序列和)相关推荐

  1. python升序数_Python求最大升序子序列与最小出现频率最高的数字,急急急!

    展开全部 >>> import sys >>> >>> def generateRandomList(size, start=0, stop=10 ...

  2. 跳棋游戏利用树构建合法路径出现循环的解决办法

    问题 我在做跳棋游戏时利用树来存储每一个棋子的合法路径,构造落点树时,要求遍历路径上每一个可能的落点.于是出现了一个尴尬的状况--三个落点围成了圈,如下图. 黑色实心点为棋子位置,三个虚线表示位置为形 ...

  3. LeetCode高频题:多多发明了一个跳棋游戏,n个格子组成,格子上有字符‘L’或‘R’,遇到L走i-xi,遇到R走i+xi,问每个位置为起点,到游戏结束,分别需要走多少步

    LeetCode高频题:多多发明了一个跳棋游戏,n个格子组成,格子上有字符'L'或'R',遇到L走i-xi,遇到R走i+xi,问每个位置为起点,到游戏结束,分别需要走多少步? 提示:本题是系列Leet ...

  4. MT小码哥的跳棋游戏+新篇

    小码哥的跳棋游戏 小码哥喜爱跳棋.跳棋游戏在一条直线上,一共n 个位置(1~n ),每个位置有 2个状态: 0表示没有棋子,1表示有棋子.小码哥的棋子自然是能通过没有棋子的位置.当面前有 1个棋子时, ...

  5. java 求数组最大子序列之和

    经典问题: 给定一个int[]数组,求其最大子序列之和(条件:数组中不全部都是负数). 最优算法,线性时间复杂度: public static int maxSubSum(int[] a){int m ...

  6. LintCode 1210. 升序子序列(DFS)

    1. 题目 给定一个整数数组,找到所有不同的可能的升序子序列,一个升序子序列的长度至少应为2. 例1: 输入: [4,6,7,7] 输出: [[4,6],[4,6,7],[4,6,7,7],[4,7] ...

  7. 【180622】VC++不规则窗体编程跳棋游戏实例

    够酷的VC++跳棋游戏源码,完全公开,实现了电脑对战,网络对战暂不完善,因此去掉了该部分功能. 跳子棋游戏的实现不算太难,但有一点复杂.主要原因可能就是它的棋盘为一个不规则的图形. 实现思路是:把棋盘 ...

  8. 基于JAVA的跳棋游戏的开发-计算机毕业设计

    项目介绍 本设计采用单机服务器模式,游戏规则是模仿网络上普通的跳棋游戏,主要是鼠标两次点击的图片能否实现跳转到指定位置的问题.当前,前提是点击棋子图片,若点击的是同一张图片或者两张不同的图片,则不予处 ...

  9. 基于QT实现的联网国际跳棋游戏

    1 简介 Draughts 是一款利用 Qt 实现的国际跳棋游戏,支持双人在线对战.国际跳棋是十分古 老的智力游戏之一,其规则是在 10×10 的棋盘内,黑白双方各执 20 子,通过斜向移动.跳吃等手 ...

最新文章

  1. 织梦缩略图php,dedecms怎么实现列表页缩略图随机调用
  2. Openldap部署LDAP服务器平台
  3. JMeter学习-017-java.net.SocketException: Permission denied: connect 解决方案
  4. sql 优化之关于null 和数据类型
  5. Dom4J的基本使用
  6. Ext JS 3.0 RC1.1 Released发布了
  7. 【试验】三个用于日常监控开发库与对应测试库的存储过程
  8. 因果关系固定搭配知识库项目CausalCollocation
  9. 大数据分析必须要会的python函数操作!!!
  10. Sublime Text 3.1 3170正式版+Patch注册机
  11. rpm linux gcc安装目录,Linux环境下通过rpm安装gcc的顺序
  12. python编程单词排序_Python编程20:字典的遍历和排序
  13. Kafka+Spark Streaming+Redis实时系统实践
  14. tensorflow学习之(十一)RNN+LSTM神经网络的构造
  15. 怎么把pdf分开?pdf文件拆分为单个pdf怎么拆分?
  16. 【教程】在word中如何替换文字,新手请绕道!
  17. openwrt web框架luci简介,20行代码写一个前后端交互页面
  18. 优麒麟 20.04 pro更换内核
  19. 虚拟机双硬盘安装ubuntu固态+机械
  20. 玄学:那些年我为之疯狂的超能力(有音频版)

热门文章

  1. STM32之ADC外设(模拟-数字转换器外设)
  2. 超好理解的哈夫曼树(最优二叉树)与例题
  3. Linux内核学习笔记之网卡驱动的详细分析:RTL8139
  4. PC网站微信扫码支付之Native支付(模式二)
  5. 前端做图,零基础如何学习数位板绘画?
  6. 台式计算机在打开程序时 风扇就响,电脑无故黑屏,风扇狂转,声音超级大。...
  7. stm32读写 DS2431
  8. 【F28335】EALLOW和EDIS指令的使用
  9. Java使用POI生成饼状图导出到word文档(饼状图)
  10. 以UES为例,分析区块链目前的发展现状