动态规划
文章平均质量分 72
兔子大天使
我总是在对的时间做错误的事情。
我可以放弃一切,除了你
展开
-
最大公共子串问题
<br /><br />最大公共子串问题<br />这个是动态规划的基础题目。动态规划就是递推和重复子结构。<br />确定了递推关系后。找到一个能极大地减少重复运算的子结构至关重要。选的好了,时间效率会很好。<br />这个问题,不妨设第一个串为a,长度为n,第二个串为b,长度m。那么最长的子序列长度为f(n,m)<br />当a[n]=a[m]时<br />f(n,m)=1+f(n-1,m-1)<br />否则f(n,m)=max(f(n-1),f(m-1))<br />同时建立一个存储计算过的f(x,原创 2011-05-13 16:24:00 · 749 阅读 · 0 评论 -
陪审团问题
<br /> <br />问题描述:<br />问题描述<br />在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定。陪审团是由法官从公众中<br />挑选的。先随机挑选n 个人作为陪审团的候选人,然后再从这n 个人中选m 人组成陪审团。<br />选m 人的办法是:<br />控方和辩方会根据对候选人的喜欢程度,给所有候选人打分,分值从0 到20。为了公<br />平起见,法官选出陪审团的原则是:选出的m 个人,必须满足辩方总分和控方总分的差的<br />绝对值最小。如果有多种选择方案的辩方总分和控方原创 2011-05-16 15:58:00 · 1376 阅读 · 0 评论 -
小花店问题
F束花从左到右放在V个花瓶里面(1这个题和最大公共子串的思考角度相似。由于花必须要小于等于瓶子。而且花的编号由小到大,不能乱序。例如就不能把出现【2,4】 【1,5】这种现象。也就是说插在花瓶中的花按照花瓶的顺序,序号升序排列。 不妨用f(i,j)来表示把前i朵花插入前个瓶子中。当i=j时,f(i,j)=v[1,1]+v[2,2]+...+v[i,i];当i=0时,f(0,j)=0; 当i!=j, 且i!=0时f(i,j)=max(f(i,j-1),f(i-1,j-1)+v[i,j]) ,i#includ原创 2011-05-16 16:36:00 · 647 阅读 · 0 评论 -
整数划分问题
给定一个自然数,分成k部分,A1,A2..的数的和,要求A1 #include #define MaxN 100 class SplitToKNum { public: SplitToKNum() { std::cin>>n; std::cin>>k; memset(f,0,sizeof(f)); for(int i=1;i原创 2011-05-20 16:23:00 · 1104 阅读 · 0 评论 -
中世纪剑士
n个人决斗,两两之间有强弱关系,强弱关系不传递,例如a>b,b>c,c>a。n个剑士围成一个圈,一次抽签,抽中的人和他右边的人决斗,输了的人出圈。现在问是否存在一种决斗方式让第k个人生出,计算可能胜出的的人数和方案。这个题目让我想起了围成一个圈的猴子的题目,那个题目是约瑟夫问题。和这个不一样。这个题目:一个人要胜出,则要胜了所有右边的人,同时也要胜出左边的人。因为是围成一个圈,所以该人胜出的话,最终肯定是自己跟自己相遇。那么,这种情况下,把圈展开成一个链,将该链延长一倍,如果i和i+n可以相遇,则说明i可以原创 2011-05-23 10:51:00 · 1046 阅读 · 0 评论 -
积木问题
<br /> 有N块积木,我们需要用这些积木造塔。每个塔有H层,最底层包含M块积木;对于上面的每一层,包含的积木块数必须比下面一层的多1或者少1.<br /> 给定输入条件:积木数N,塔的层数H,最底层的积木数M,积木不一定要用完。求方案总数<br /> <br />使用动态规划的方法。同时使用剪枝条件进行剪枝<br />剪枝条件:当前剩余的积木数量不足以构建H层的塔,则终止当前的方案<br /> 当前剩余的积木数量大于所需的最大数量:每层递增1的所有层的和。同时如原创 2011-04-12 17:15:00 · 3067 阅读 · 0 评论 -
青蛙的烦恼
<br /> 池塘里有n片荷叶,围成了一个凸多边形。荷叶的编号分别为1,2,3,。。n,n<=1000, 求一种青蛙的跳跃策略,使得青蛙跳过的距离最短,并且遍历了所有的荷叶<br /> 分析:最短距离并非遍历凸多边形的所有的边。例如:A(2 3),B(6 3),C(4 1),D(1 1),四个点组成的凸多边形,最短的遍历路径为ADBC,经过了对角线DB。<br /> <br />使用动态规划解这道题目。子问题为每个节点周围节点数目为1,2,3,..,时候的问题,在解题的过程中,不断的扩大每个节点周原创 2011-05-06 16:38:00 · 1059 阅读 · 0 评论 -
青蛙过河
一条长度为L的小河上飘着一些荷叶,青蛙要踩着这些荷叶过河。由于河宽和青蛙一次跳过的距离都是正整数,我们可以把青蛙可能到达的点看成是数轴上的一串整点:0,1,2,。。。,L。坐标为0的点在河的一次,坐标为L的点在河的另一侧。青蛙从坐标为0的点开始,不停的向坐标为L的点跳跃。一次跳跃原创 2011-07-19 11:24:35 · 1073 阅读 · 0 评论