趣味编程集
文章平均质量分 80
yzfuture2010
这个作者很懒,什么都没留下…
展开
-
n人决斗问题
问题描述: n个人围成一圈,按顺序编上号( 1~n ) 。一共进行了n-1场决斗,最后一人胜出。规则如下:每轮只进行一场决斗,决斗人通过抽签选出,每人抽中的机会是均等的;每个人只能和他右边的人决斗;决斗负者被淘汰出圈,空位由他旁边的人补上。已知n个人之间的强弱关系由关系矩阵A来描述,如果 A(i,j)=1 表示第 i 人强于第 j 人 ;如果A(i,j)=0 表示第 i 人弱于第原创 2012-09-29 23:24:19 · 724 阅读 · 0 评论 -
棋盘空格的移动问题
问题描述: 有一个5x5的方格棋盘,棋盘上放着24颗不同的棋子,分别用英文大写字母A,B, ...,X 来表示,棋盘上还有一个方格空着。游戏的每一步是将空格上、下、左、右中的一颗棋子移入空格,这四种操作分别用1、2、3、4来表示。 如果给出棋盘的初始状态和一定顺序的有限操作序列,就可以得到唯一的目标状态。 现已知棋盘的初态、终态和被打乱后的操作序列( 操作序列长度 L原创 2012-09-16 21:08:14 · 1298 阅读 · 0 评论 -
一道有趣的笔试题( 水杯量水问题 )
若干年前,刚进入编程行业不久,得到一家公司的笔试机会.其中一题印象深刻:给两个空量杯,一个5ml,一个3ml,加水后,要通过量杯互倒,得到4ml水,求算法. 之前做过一个人机对战的游戏,接触到决策树.看到这道题时,第一感觉应该也是可以用树形数据结构来解决的.虽然它不属于博弈类的问题。 最初考虑,以量杯作为树的结点,在树中找出一条路径( 分支 ),使得路径终结点的当前水量为4ml,那么问原创 2012-08-17 16:50:37 · 9863 阅读 · 1 评论 -
煎饼堆问题
有一堆煎饼,直径各异,摞成一堆。可用一把铲子插入任意两张饼之间,完成一次对铲子之上所有饼的翻转操作。假设最底部的饼的位置为1,最顶层的饼的位置为n。对第i (1≤i≤n) 张饼及其上的所有饼的一次翻转操作可以记为flip(i)。例如: 8 7 2 4 6 5 6 4 8原创 2012-10-19 21:30:12 · 1748 阅读 · 0 评论 -
选球博奕与动态规划(四)
(三)中提供的算法是基于相应递归公式的。它的时间复杂度为:原创 2013-09-26 12:34:38 · 686 阅读 · 0 评论 -
选球博奕与动态规划(三)
观察图一可发现,各局面在决策树中是反复出现的,而且较复杂的局面可以分解为较简间的局面。原创 2013-09-26 12:34:09 · 996 阅读 · 0 评论 -
选球博奕与动态规划(二)
为了得到更好的算法,需要先进行以下讨论: 对于本问题来说,所谓的问题有解实际上是说:在初始局面下,假设首轮决策方是A,那么一定存在一个符合题目要求的数字m,当A取球总数等于m时,经过t轮决策(每轮决策A、B都作出了最有利于自己的决策)后,A一定能拿到最后一个球。它又等价于下面这种表达:对于初始局面G的当前选择方而言,在每轮决策均遵守博奕规则2的前提下,必然存在路径P,使得路径P对于当原创 2013-09-26 12:32:22 · 734 阅读 · 0 评论 -
选球博奕与动态规划(一)
讨论一个有趣的选球问题,问题如下: 有24个球,A、B双方轮流选取,每次可选球若干,要求:第一次不能全部取完;各方每次选取的球数不能为零,也不能超过上一次对方选择的球数。问:如果A先取,那么第一次应该选几个才能保证取到最后一个球? 选球的过程可以用决策树来表达,简化问题,先给出6球的决策树如下:原创 2013-09-26 12:32:44 · 785 阅读 · 0 评论