很水的一题

输入串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. [leetcode]_Integer to Roman

    题目:对应之前那道将罗马数字转换整型数字的题目.反过来. 思路:刚开始做的时候,想着用程序进行判断,复杂的要死.网络了别人代码,非常清晰. 代码: 1 public String intToRoman ...

  2. scala实现Netty通信

    在学习spark源码的时候看到spark在1.6之后底层的通信框架变成了akka和netty两种方式,默认的是用netty根据源码的思路用scala写了一个Demo级别的netty通信 package ...

  3. 取消界面的title

    在setContentView(R.layout.activity_main)方法上面添加代码(继承Activity的写法): requestWindowFeature(Window.FEATURE_ ...

  4. android AES 部分机器javax.crypto.BadPaddingException: pad block corrupted

    package com.bbguoxue.poetry.util; import java.security.SecureRandom; import javax.crypto.Cipher; imp ...

  5. Linux操作系统常用命令

    http://www.cnblogs.com/huangzelin/p/5617611.html http://www.cnblogs.com/liumt/p/6117168.html

  6. Python之路-(三级菜单)

    data = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, 'youk ...

  7. iphone/ipad关于size, frame and bounds总结和UIScroll view学习笔记

    1. iphone/ipad大小 Device Screen dimensions(in points) iphone and ipod 320 X 480 ipad 768 X 1024 2. UI ...

  8. [.NET] 打造防“狼”神器 :任务栏篇

    @微微一笑:本文标题纯属自娱自乐. 隐藏任务栏效果图: 对比 说起来惭愧,上面这个隐藏任务栏功能,只是完成了我一半的预想.本想是可以选择性的隐藏任务栏上的某个TaskBarButton,但是Win7+ ...

  9. Windows上搭建android开发环境

    在搭建android开发环境时需要四部分内容,框架如下 其中Java SDK和Eclipse在java4android中有过介绍,重点介绍ADT和Android SDK的安装. 安装Android S ...

  10. 浅谈Objective-C异常处理

    -----<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培 ...