很水的一题

输入串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;
else
dp[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 lenth
int 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;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

dp--poj1458最长公共子序列的更多相关文章

  1. POJ-1458.CommonSubsequence.(DP:最长公共子序列裸题)

    本题大意:给出两个字符串,让你求出最长公共子序列的长度并输出. 本题思路:本题是经典的DP问题,由于是两个字符串,那么我们就用一个二维数组来进行区分,用dp[ i ][ j ]来表示在s1和s2中分别 ...

  2. POJ1458 最长公共子序列

    描述: 给定两个字符串,求其最长公共子序列(不用连续), 输入: abc bcc programning content 输出: 2 2 解法: 动态规划. 定义dp[i][j]表示s1到i索引,以及 ...

  3. 51nod 1183 编辑距离【线性dp+类似最长公共子序列】

    1183 编辑距离 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个 ...

  4. hdu 1080 dp(最长公共子序列变形)

    题意: 输入俩个字符串,怎样变换使其所有字符对和最大.(字符只有'A','C','G','T','-') 其中每对字符对应的值如下: 怎样配使和最大呢. 比如: A G T G A T G -  G ...

  5. dp(最长公共子序列)

    A subsequence of a given sequence is the given sequence with some elements (possible none) left out. ...

  6. 1. 线性DP 1143. 最长公共子序列

    最经典双串: 1143. 最长公共子序列 (LCS)  https://leetcode-cn.com/problems/longest-common-subsequence/submissions/ ...

  7. Codeforces 1114D Flood Fill (区间DP or 最长公共子序列)

    题意:给你n个颜色块,颜色相同并且相邻的颜色块是互相连通的(连通块).你可以改变其中的某个颜色块的颜色,不过每次改变会把它所在的连通块的颜色也改变,问最少需要多少次操作,使得n个颜色块的颜色相同. 例 ...

  8. [dp]LCS最长公共子序列

    https://www.51nod.com/tutorial/course.html#!courseId=4 复杂度:${\rm O}(nm)$ 转移方程: #include<bits/stdc ...

  9. POJ-1458(LCS:最长公共子序列模板题)

    Common Subsequence POJ-1458 //最长公共子序列问题 #include<iostream> #include<algorithm> #include& ...

  10. 动态规划1——最长递增子序列、最长公共子序列、最长公共子串(python实现)

    目录 1. 最长递增序列 2. 最长公共子序列 3. 最长公共子串 1. 最长递增序列 给定一个序列,找出其中最长的,严格递增的子序列的长度(不要求连续). 解法一:动态规划 通过一个辅助数组记录每一 ...

随机推荐

  1. PeopleSoft Object Types Definitions

     PeopleSoft stores object definitions types such as Record, Field and SQL definitions as numbers in  ...

  2. Operation is not valid due to the current state of the object.

    今天遇到一个asp.net的草郁闷的问题,看下截图 狂晕啊,在google上狂搜了一下,好在已经有大侠也遇到过这个问题了,先看下别人的解决办法吧 Operation is not valid due ...

  3. Flex 4.0及4.6发布的网络应用在内网内会访问很慢的解决方案

    Flex 4.x 开发的程序部署在外网在能访问到www.adobe.com的时能够很快加载完成,但是部署在本地局域网,不能访问外网的服务器上,用浏览器访问应用需要加载几分钟的时间,这种等待时间客户几乎 ...

  4. IBM开发者 JSON 教程

    在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式.掌握 Ajax 的这一期讨论另一种有用的数据格式 JavaScript Object Notation(JSON),以及如何 ...

  5. Mac上添加adb_usb.ini

    max上添加android驱动支持 用到的命令: 命令方式最简单,键入如下两行命令你就可以实现对文件的现实和隐藏功能了.这个时候肯定会有童鞋问:“在哪里敲命令呢?”,Launchpad——其他——终端 ...

  6. 深入理解Java String#intern() 内存模型

    原文出处: codelog.me 大家知道,Java中string.intern()方法调用会先去字符串常量池中查找相应的字符串,如果字符串不存在,就会在字符串常量池中创建该字符串然后再返回. 字符串 ...

  7. Python脚本控制的WebDriver 常用操作 <七>浏览器前进和后退操作

    下面将使用WebDriver来控制浏览器的前进和后退操作 测试用例场景 此操作和get.url()方法功能相同 Python脚本 # coding=gbk ''' Created on 2013年12 ...

  8. IE10-浏览器实现placeholder效果

    如下图,在文本框为空时显示提示文字 在IE10+和chrome浏览器加placeholder属性及可实现 ,单在IE10-浏览器并不支持该属性, 以下是placeholder在IE10-浏览器的实现 ...

  9. r

    http://vgoulet.act.ulaval.ca/en/emacs/mac/ mean() 均值 sd()标准差 http://www.walware.de/it/downloads/stat ...

  10. ping通IP,telnet 3306不通

    一个同事装的MySQL数据库,无法连接.​​1.查看权限​​2.查看防火墙​​检查用户权限,防火墙都没问题,就是无法连接,能ping通,但是telnet 3306 端口无法成功.​​检查了下数据库配置 ...