算法题目
文章平均质量分 61
兔子大天使
我总是在对的时间做错误的事情。
我可以放弃一切,除了你
展开
-
Raney引理
Raney引理: 设整数序列A={Ai,i=1,2,...,N},且部分和为Sk=A1+,...,+Ak,序列中的所有的数字之和为Sn=1; 则在A的N个循环表示中,有且仅有一个序列B,满足B的任意部分和Si均大于零。证明: 由于Sn=1,则Sk+Sn=Sk+1,存在这样一个数x,当在x和x+1之间的某点过后,其后所有的点都在0以上。 用几何图形来说明就是,用两条线夹住Si的曲线,在每连续N个单位的长度中,直线与函数图像有且仅有一个交点。因为斜率为1/N,原创 2011-05-09 10:53:00 · 2723 阅读 · 0 评论 -
排列问题
<br /> 在整数1,2,...,N的排列中,有些排列满足下面一个性质A:该排列中除了最后一个整数外的每一个整数后面都跟有一个与它相差为1的数字。设有N个数字,已知一部分位置上的数,求满足性质A的排列有多少个?<br /> <br />分析:假设只有一个数字, 即N=1,则满足A条件。若只有两个数字,则一定满足。若有三个数字,不论最后一个数字是什么,满足A条件的后缀序列必然是连续数字组成的集合。例如3个数字的时候,后两个数字不可能为(1,3)。根据这个属性我们设计动态规划算法。<br原创 2011-05-08 16:55:00 · 493 阅读 · 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 评论 -
海战游戏
<br />在N*M的矩阵上,放置了L个军舰,军舰的左上角坐标为ux,uy,左下角坐标为dx,dy。军舰是一个矩形。现在要放置第L+1个军舰,但是军舰不能重叠,并且上下左右,上左,上右,下左,下右都不能相邻。求放置一个长为p,宽为q的军舰的放置方案数(放置方案)。<br />2<=N,M<=30000,L<=30;<br /> <br />朴素的方法。对军舰可以放置的位置进行枚举,并且判断每一个位置是否与其他军舰冲突。时间复杂度为O(MNL)<br /> <br />补集的方法。计算所有冲突的位置,用总放置原创 2011-04-15 11:51:00 · 891 阅读 · 0 评论 -
单色三角形
空间里有n个点,任意三点不共线。每两个点之间都用红色或者黑色线段链接。如果一个三角形的三条边同色,责成这个三角形是单色三角形。对于给定的红色线段列表,找出单色三角形的个数。分析:如果直接找需要枚举所有的三个点的组合,有C(n,3)种组合,当n比较大的时候,需要枚举的组合很多,复杂度为O(n3);但是在遍历每个点的时候都可以枚举颜色不同的两条边。则每个点上不同的颜色的三角形有R*B,R为红色边的个数,B为黑色边的个数。所有点上的不同颜色边组之和为Q,则总共有C(n,3)-Q/2种相同颜色的边。时间复杂度变为了原创 2011-04-14 13:46:00 · 2135 阅读 · 0 评论 -
单色三角形问题
空间里有n个点,任意三点不共线。每两个点之间都用红色或者黑色线段链接。如果一个三角形的三条边同色,责成这个三角形是单色三角形。对于给定的红色线段列表,找出单色三角形的个数。1,如果直接找需要枚举所有的三个点的组合,有C(n,3)种组合,当n比较大的时候,需要枚举的组合很多,复杂度为O(n3);但是在遍历每个点的时候都可以枚举颜色不同的两条边。则每个点上不同的颜色的三角形有R*B,R为红色边的个数,B为黑色边的个数。所有点上的不同颜色边组之和为Q,则总共有C(n,3)-Q/2种相同颜色的边。时间复杂度变为了O原创 2011-04-14 11:11:00 · 2773 阅读 · 0 评论 -
棋盘移动问题
5*5的棋盘上有24个棋子,有一个空位,棋子都不相同,现在随意的移动空位,只知道棋盘的初始状态和终止状态,以及每一种移动方法的次数,例如上5次等,求是否存在这样一个序列,如果存在,输出该序列,否则输出0该题目的剪枝条件为1,横向移动步数之和与初始坐标之和为目标坐标,同理纵向移动步数2,每个方向的移动步数小于等于该方向最大的步数3,每次移动不能超过边界算法为典型的回朔法原创 2011-06-07 16:07:00 · 1719 阅读 · 0 评论 -
低频词过滤
低频词过滤题目描述:请编写程序,从包含大量单词的文本中删除出现次数最少的单词。如果有多 个单词都出现最少的次数,则将这些单词都删除。 输入数据:程序读入已被命名为 corpus.txt 的一个大数据量的文本文件,该文件包含英 文单词和中文单词,词与词之间以一个或多个 whitespace 分隔。(为便于调试,您可下载 测试corpus.txt 文件,实际运行时我们会使用原创 2011-06-07 15:53:00 · 3813 阅读 · 1 评论 -
积木问题
<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 /> <br />定理:一个数如果可以表示成为连续的正整数之和的形式,则必定包含大于1的奇因子<br /> <br />证明:如果一个数m可以表示成为 a+(a+1)+,...,+(a+k)<br /> 则m=(a+a+k)*(k+1)/2;因为 a+a+k-k-1=2*a-1为奇数,所以m必然包含一个奇因子。<br /> <br />表示法:对于每一个正整数,可以表示成为(奇因子个数)个连续整数的表示。对于每一个奇因子2*k+1,都可以表示成为m=(2*k+1)*n的形式,则m可以原创 2011-05-31 16:04:00 · 2616 阅读 · 0 评论 -
重叠区间大小
<br /> <br /><br />题目描述:<br /> <br />请编写程序,找出下面 “ 输入数据及格式 ” 中所描述的输入数据文件中最大重叠区间的大小。<br />对一个正整数 n ,如果 n 在数据文件中某行的两个正整数(假设为 A 和 B )之间,即 A<=n<=B 或 A>=n>=B ,则 n 属于该行;如果 n 同时属于行 i 和 j ,则 i 和 j 有重叠区间;重叠区间的大小是同时属于行 i 和 j 的整数个数。<br /><br /> <br />例如,行( 10 20 )和( 1原创 2011-06-02 16:30:00 · 967 阅读 · 0 评论 -
中世纪剑士
n个人决斗,两两之间有强弱关系,强弱关系不传递,例如a>b,b>c,c>a。n个剑士围成一个圈,一次抽签,抽中的人和他右边的人决斗,输了的人出圈。现在问是否存在一种决斗方式让第k个人生出,计算可能胜出的的人数和方案。这个题目让我想起了围成一个圈的猴子的题目,那个题目是约瑟夫问题。和这个不一样。这个题目:一个人要胜出,则要胜了所有右边的人,同时也要胜出左边的人。因为是围成一个圈,所以该人胜出的话,最终肯定是自己跟自己相遇。那么,这种情况下,把圈展开成一个链,将该链延长一倍,如果i和i+n可以相遇,则说明i可以原创 2011-05-23 10:51:00 · 1046 阅读 · 0 评论 -
整数划分问题
给定一个自然数,分成k部分,A1,A2..的数的和,要求A1#include #define MaxN 100class 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 评论 -
小花店问题
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 评论 -
陪审团问题
<br /> <br />问题描述:<br />问题描述<br />在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定。陪审团是由法官从公众中<br />挑选的。先随机挑选n 个人作为陪审团的候选人,然后再从这n 个人中选m 人组成陪审团。<br />选m 人的办法是:<br />控方和辩方会根据对候选人的喜欢程度,给所有候选人打分,分值从0 到20。为了公<br />平起见,法官选出陪审团的原则是:选出的m 个人,必须满足辩方总分和控方总分的差的<br />绝对值最小。如果有多种选择方案的辩方总分和控方原创 2011-05-16 15:58:00 · 1376 阅读 · 0 评论 -
最大公共子串问题
<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 评论 -
青蛙过河
一条长度为L的小河上飘着一些荷叶,青蛙要踩着这些荷叶过河。由于河宽和青蛙一次跳过的距离都是正整数,我们可以把青蛙可能到达的点看成是数轴上的一串整点:0,1,2,。。。,L。坐标为0的点在河的一次,坐标为L的点在河的另一侧。青蛙从坐标为0的点开始,不停的向坐标为L的点跳跃。一次跳跃原创 2011-07-19 11:24:35 · 1073 阅读 · 0 评论