HDU 1159 Common Subsequence (动态规划LCS)
来源:互联网 发布:淘宝信息管理系统建设 编辑:程序博客网 时间:2024/04/29 11:08
LCS 最长公共子序列的运用。
LCS 重点就是理解状态转移方程:对于每一次,都有
dp[i][j] = Max ( dp[i-1][j-1] + match(s1[i],s2[j]), dp[i-1][j], dp[i][j-1] );
i为字符串s1遍历的当前位置,j为字符串s2遍历的当前位置。 dp[i][j]表示,字符串s1到第i个,字符串s2到第j个时,当前最长公共子序列长度。
有3种情况。即: dp[i-1][j-1] + match(s1[i],s2[j]) 、 dp[i-1][j]、 dp[i][j-1] 中取最大值。其中match(s1[i],s2[j]) 当s1[i]==s2[j]时为1,不相等时为0;
#include<iostream>using namespace std;#define Max(a,b,c) (a>b?(a>c?a:c):(b>c?b:c))char s1[1001],s2[1001];int dp[101][101];int match(char a,char b){ if(a==b)return 1; return 0;}int main(){ while(scanf(" %s %s",s1+1,s2+1)!=EOF) //下标从1开始存储 { int m1,m2; m1=strlen(s1+1); m2=strlen(s2+1); //printf("%d %d\n",m1,m2); memset(dp,0,sizeof(dp)); for(int i=1;i<=m1;i++) for(int j=1;j<=m2;j++) { //核心。阶段性取最优值。 //dp[i][j]表示当遍历到字符串s1的第i个与字符串s2的第j个时的最优解 dp[i][j]=Max(dp[i-1][j-1]+match(s1[i],s2[j]),dp[i-1][j],dp[i][j-1]); } printf("%d\n",dp[m1][m2]); } // system("pause"); return 0;}
- HDU 1159 Common Subsequence (动态规划LCS)
- 动态规划LCS问题( HDU - 1159 Common Subsequence)
- HDU 1159 Common Subsequence(最长公共子序列(LCS) 动态规划(DP))
- 【common subsequence】动态规划+回溯求LCS
- hdu 1159 Common Subsequence (动态规划)
- hdu 1159 Common Subsequence(动态规划)
- hdu 1159 Common Subsequence 动态规划
- HDU 1159 Common Subsequence(动态规划)
- HDU 1159 Common Subsequence(动态规划)
- 【HDU 1159】Common Subsequence (动态规划)
- hdu 1159 Common Subsequence (LCS)
- HDU 1159 Common Subsequence(LCS)
- hdu 1159 Common Subsequence(LCS)
- HDU 1159 Common Subsequence【LCS】
- hdu 1159 Common Subsequence (lcs)
- hdu 1159 Common Subsequence(lcs)
- HDU-1159-Common Subsequence【LCS】
- HDU 1159 Common Subsequence(LCS)
- 修改Myeclipse的编码
- STL中map实现技术
- uva physics
- Spring Integration集成框架之JDBC
- linux中用mtrace 检查内存泄漏
- HDU 1159 Common Subsequence (动态规划LCS)
- NGUI 的callWhenFinished必须激活eventReceiver才能起效果。
- Libpcap库主要函数
- 河南省第一届大学生程序设计大赛解题报告
- Ecological Premium
- Spring Integration集成框架之Message-Channel
- Windows核心编程学习六:进程优先级组和线程优先级
- JSP隐藏对象--JAVA web开发
- MyEclipse提示键配置