dp--poj1458最长公共子序列
来源:互联网 发布:java 将日期格式化 编辑:程序博客网 时间:2024/05/29 09:37
很水的一题
输入串a与串b;
Dp[i][j]表示a串中1~i与b串中1~j的子串的最长公共子序列。
Max{dp[i-1][j], dp[i][j-1]} (a[i]!=b[j])
Dp[i][j]= Dp[i-1][j-1]+1 (a[i]==b[j])
最后,a,b的最长公共子序列为dp[strlen(a)][strlen(b)]
但是我居然细节出错了尼玛。。
#include<stdio.h>#include<string.h>#include<iostream>using namespace std;int max3(int a,int b,int c){int d=b>c?b:c;return a>d?a:d;}int max2(int a,int b){return a>b?a:b;}int dp[1001][1001];int main(){char a[1001],b[1001];while(cin>>a>>b){int lena=strlen(a);int lenb=strlen(b);memset(dp,0,sizeof(dp));int i,j;if(a[0]==b[0])dp[0][0]=1;for(i=1;i<lena;i++){//dp[i][0]+=dp[i-1][0];if(a[i]==b[0])dp[i][0]++;else dp[i][0]=dp[i-1][0]; //忘了这边也要判断一下,晕}for(i=1;i<lenb;i++){//dp[0][i]+=dp[0][i-1];if(a[0]==b[i])dp[0][i]++;else dp[0][i]=dp[0][i-1];}for(i=1;i<lena;i++)for(j=1;j<lenb;j++){//dp[i][j]+=max2(dp[i-1][j],dp[i][j-1]);if(a[i]==b[j])dp[i][j]=dp[i-1][j-1]+1;elsedp[i][j]=max2(dp[i][j-1],dp[i-1][j]);}cout<<dp[lena-1][lenb-1]<<endl;}return 0;}
当然 这个是从0开始的所以需要特判,,
如果输入从1开始就然后[0]赋值0就好了,不需要特判
#include<iostream>#include<string.h>#include<stdio.h>using namespace std;char a[1000]; char b[1000];int dp[1000][1000]; //dp[i][j] is a[1~i] and b[1~j]'s common string's longest lenthint main(){ while(scanf("%s",a+1)!=EOF){ //cin one of the string scanf("%s",b+1); //cin the other int lena=strlen(a+1); int lenb=strlen(b+1); for(int i=0;i<=lena;i++){ dp[i][0]=0; } for(int j=0;j<=lenb;j++){ dp[0][j]=0; } for(int i=1;i<=lena;i++){ for(int j=1;j<=lenb;j++){ if(a[i]==b[j]){ dp[i][j]=dp[i-1][j-1]+1; } else{ dp[i][j]=((dp[i-1][j])>(dp[i][j-1]))?(dp[i-1][j]):(dp[i][j-1]); } } } printf("%d\n",dp[lena][lenb]); } return 0;}
0 0
- poj1458(DP最长连续公共子序列)
- poj1458(最长公共子序列dp)
- dp--poj1458最长公共子序列
- POJ1458 最长公共子序列 经典DP
- DP+(POJ1458) 最长公共子序列
- POJ1458最长公共子序列
- 最长公共子序列 poj1458
- 最长公共子序列 poj1458
- 最长公共子序列 poj1458
- poj1458最长公共子序列
- poj1458最长公共子序列
- POJ1458【最长公共子序列】
- POJ1458 最长公共子序列
- 最长公共子序列poj1458
- poj1458 Common Subsequence (dp,最长公共子序列)
- Poj1458——最长公共子序列
- poj1458最长公共子序列(LCS)
- POJ1458(最长公共子序列)
- 网络爬虫(五)------------简单网络爬虫实现代码,记得要添加htmlpaser和htmlclient两个包
- mysql之控制台下的事务控制
- 对于字符输入的处理
- limit用法详解
- 变量内容的删除、替代与替换
- dp--poj1458最长公共子序列
- Java中throw和throws的区别(经典)
- IC设计前端到后端的流程和eda工具。
- 脸书pop动画的五个步骤
- 如何查找OAF页面所对应的表?
- 浏览器登录cookie
- mule studio学习笔记(六):外部web service调用
- java---静态语句块、构造语句块、构造器的初始化顺序
- 【最短路径】poj 2387