上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 27 下一页
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1159这题可用递归解出(1)递归方法求最长公共子序列的长度 1)设有字符串a[0...n],b[0...m],下面就是递推公式。 当数组a和b对应位置字符相同时,则直接求解下一个位置;当不同时取两种情况中的较大数值。 #include//会超时 #includechar a[100000],b[100000];int lena,lenb;int LCS(int i,int j){ if(i>=lena || j>=lenb) return 0; if(a[i... 阅读全文
posted @ 2013-08-06 17:09 执着追求的IT小小鸟 阅读(184) 评论(0) 推荐(0) 编辑
摘要: DP对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读者感到迷惑,引导读者去思考,所以如果你在阅读中发现有不通顺的地方,让你产生错误理解的地方,让你难得读懂的地方,请跟贴指出,谢谢!----第一节----初识动态规划--------经典的01背包问题是这样的:有一个包和n个物品,包的容量为m,每个物品都有各自的体积和价值,问当从这n个物品中选择多个物品放在包里而物品体积总数不超过包的容量m时,能够得到的最大价值是多少 阅读全文
posted @ 2013-08-05 22:28 执着追求的IT小小鸟 阅读(236) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2533简单的dp运用于求最长有序子序列,这里是递增我们假设原数列定义为数组a[],然后定义一个数组b[i],表示以a[i]结尾的最长公共子序列的长度,只要求出所有的b[i]数组也就可以确定最长的公共子序列, 那么我们根据已经求出的b[0]--b[i-1],来求b[i]呢,,也就如何求出以a[i]结尾的最大公共子序列的长度呢, 此时在a[0]-a[i-1]范围内,已经求出多个长度的公共子序列,且最大长度的一个序列的长度为s,这个序列的最后一个元素为t,那么 1.如果a[i]t,这时候就会比较的麻烦了,因为a[i]不可能成为长度为s的最长公共子 阅读全文
posted @ 2013-08-05 22:17 执着追求的IT小小鸟 阅读(160) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1257贪心,一次把后面的高度或覆盖到前面比他高的上面,或自成一组#include#includeint a[1000000],b[1000000];int main(){ int i,j,n,k; while(~scanf("%d",&n)) { k=0; memset(b,0,sizeof(b)); for(i=0;ia[i]) { b[j]=a[i]; break; ... 阅读全文
posted @ 2013-08-05 21:32 执着追求的IT小小鸟 阅读(128) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1003初识dp,大问题是求出总序列的最大和,而每个数都有加到前面作为前面已经加好的和的增量和自己独立成为一个“最大和”的选择,在这两个选择中的最大和就是局部的最大和,而保存好第一个最大和,将整个序列的所有局部最大和都求解出来,就能得到全列的最大和#includeint main(){ int i,ca=1,t,s,e,n,x,now,before,max; scanf("%d",&t); while(t--) { scanf("%d",&n); for( 阅读全文
posted @ 2013-08-05 16:38 执着追求的IT小小鸟 阅读(152) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1016素数结,简单dfs,只是前面的prime我开得太小,起先只开到21,可是题目算的是两数之和,最高可达38#include#includeint prime[40]={0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0};int ans[21],vis[21],n;int print(int x){ int i; for(i=1;i<=x;i++) if(i==1) prin... 阅读全文
posted @ 2013-08-03 16:47 执着追求的IT小小鸟 阅读(148) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1372简单广搜,秒过,关键在于国际象棋中马的走法是日,我日。。。#include#includeint visited[8][8],dir[8][2]={{-2,-1},{-2,1},{2,-1},{2,1},{-1,-2},{-1,2},{1,-2},{1,2}};//可以走四个方向 int sx,sy,ex,ey;struct node{ int x,y,move;}s[100000];int pd(int a,int b){ return (a=8||b=8);}int bfs(){ i... 阅读全文
posted @ 2013-08-03 15:49 执着追求的IT小小鸟 阅读(152) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1175这题是1728逃离迷宫的简化版本,也是要找到转弯最少的那个路径。。。不过这题还要将不一样的棋子的连法,及要连接的棋子中存在0的连法删割掉,直接输出NO#include#include#include#define T 2int hash[1000][1000],vis[1000][1000];int n,m,sx,sy,ex,ey,temp;int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};struct node{ int x,y,k;//保存坐标和转弯数 }s[1.. 阅读全文
posted @ 2013-08-03 11:22 执着追求的IT小小鸟 阅读(217) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1077今天看了A*搜索算法,听说牛逼的很,不过关键还是在于它的评估函数,估计也不一定每题都能这么容易想吧思路是在一个外国游戏网站上看到的,感觉百度到的也都一般http://theory.stanford.edu/~amitp/GameProgramming/就代码来说吧,s,存储所有所搜到的结点的信息,包括空格位置,深度及评估值,这里不给出h是因为h一直在变,b存储开始结点信息,visited存储是否访问到,接下来方向,答案,heap是为了提速而写的堆实现的优先队列,nali是为了区别出是否入队整个过程:1,开始结点初始化,入队列并判断是否 阅读全文
posted @ 2013-08-02 22:46 执着追求的IT小小鸟 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 因为写A*算法的需要,为了提高速度,顺手抄了个优先队列。。。。纯手搓优先队列是0个或多个元素的集合,每个元素都有一个优先权或值,对优先队列执行的操作有1) 查找;2) 插入一个新元素;3) 删除.在最小优先队列(min priorityq u e u e)中,查找操作用来搜索优先权最小的元素,删除操作用来删除该元素;对于最大优先队列(max priority queue),查找操作用来搜索优先权最大的元素,删除操作用来删除该元素.优先权队列中的元素可以有相同的优先权,查找与删除操作可根据任意优先权进行.我觉得关键在于:在堆排序的基础上,把建堆去掉就可以了,插入的时候插在叶子结点处,然后向上调整 阅读全文
posted @ 2013-08-02 22:11 执着追求的IT小小鸟 阅读(287) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 27 下一页