最长递增子序列
2013-11-04 07:56
453 查看
最长递增子序列
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=17
求一个字符串的最长递增子序列
如:dabdbf最长递增子序列就是abdf,长度为4
这是一道基本的动态规划求解的题目,与此类似的还有:最长公共子序列
分析:用一维数组dp[i]来存储以a[i]为末元素的最长递增子序列的长度,那么dp[i]至少为1(即包含它本身)。往前寻找,如果存在a[j]<a[i],那么dp[i] = dp[j]+1。那么对于所有的j<i,且a[j]<a[i],取出最大的dp[j]。如果不存在这样的元素,那么 a[i]自身构成一个长度为1的以a[i]为末尾元素的递增子序列。
这里,并不是简单的dp[i]=dp[j]+1,而是取最大的dp[j]。举个例子来说明下这种情况:“123124”,dp[0]=1,dp[1]=2,dp[2]=3,dp[3]=1,dp[4]=2,dp[5]=?。如果直接找到了小于4的元素后,直接得到dp[5] = dp[4]+1=3,这明显是不对的。
代码如下:
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=17
求一个字符串的最长递增子序列
如:dabdbf最长递增子序列就是abdf,长度为4
这是一道基本的动态规划求解的题目,与此类似的还有:最长公共子序列
分析:用一维数组dp[i]来存储以a[i]为末元素的最长递增子序列的长度,那么dp[i]至少为1(即包含它本身)。往前寻找,如果存在a[j]<a[i],那么dp[i] = dp[j]+1。那么对于所有的j<i,且a[j]<a[i],取出最大的dp[j]。如果不存在这样的元素,那么 a[i]自身构成一个长度为1的以a[i]为末尾元素的递增子序列。
这里,并不是简单的dp[i]=dp[j]+1,而是取最大的dp[j]。举个例子来说明下这种情况:“123124”,dp[0]=1,dp[1]=2,dp[2]=3,dp[3]=1,dp[4]=2,dp[5]=?。如果直接找到了小于4的元素后,直接得到dp[5] = dp[4]+1=3,这明显是不对的。
代码如下:
#include "stdafx.h" #include <iostream> using namespace std; int dp[100]; char a[100]; int max(int a, int b) { return a>=b?a:b; } int DP(int n) { int i=0,j=0; dp[0] = 1; int ans = 1;//存储最大的长度 for(i = 1;i<n;i++) { dp[i] = 1; for(j=0;j<i;j++) { if(a[j]<a[i]) dp[i] = max(dp[i],dp[j]+1); } ans = max(ans,dp[i]); } return ans; } int _tmain(int argc, _TCHAR* argv[]) { int num = 0, maxlength = 0; cout<<"input the number of test string:"; cin>>num; while(num--) { cout<<"The string:"; cin>>a; maxlength = DP(strlen(a)); cout<<"Maxlength = "<<maxlength; } return 0; }
相关文章推荐
- 曲与直的博弈促进了微积分学的发展
- win7 8 下进入要提升权限 管理员权限
- 给VS2008/VS2010 MFC项目添加启动画面
- java练习篇 求输出最大值
- python之BeautifulSoup4的例子
- .net stream
- c# 如何用SplitContainer将From分割成上下两部分 即纵向分割窗口
- [课程相关]homework-05
- 【站长图卦】十五年前,我是一名普通的钳工
- Becoming a Data Scientist – Curriculum via Metromap
- 使extjs的grid内容可复制粘贴
- java socket编程
- Extjs的grid表格的复制、粘贴
- Differences Between Heuristics and Metaheuristics
- ExtJS中MessageBox.prompt禁止粘贴
- java的错误代码。。。。
- 做一个心如止水的程序员
- hibernate之openSession()与getCurrentSession()的区别
- 程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦
- String StringBuffer和StringBuilder