dp--poj1458最长公共子序列
很水的一题
输入串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最长公共子序列的更多相关文章
- POJ-1458.CommonSubsequence.(DP:最长公共子序列裸题)
本题大意:给出两个字符串,让你求出最长公共子序列的长度并输出. 本题思路:本题是经典的DP问题,由于是两个字符串,那么我们就用一个二维数组来进行区分,用dp[ i ][ j ]来表示在s1和s2中分别 ...
- POJ1458 最长公共子序列
描述: 给定两个字符串,求其最长公共子序列(不用连续), 输入: abc bcc programning content 输出: 2 2 解法: 动态规划. 定义dp[i][j]表示s1到i索引,以及 ...
- 51nod 1183 编辑距离【线性dp+类似最长公共子序列】
1183 编辑距离 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个 ...
- hdu 1080 dp(最长公共子序列变形)
题意: 输入俩个字符串,怎样变换使其所有字符对和最大.(字符只有'A','C','G','T','-') 其中每对字符对应的值如下: 怎样配使和最大呢. 比如: A G T G A T G - G ...
- dp(最长公共子序列)
A subsequence of a given sequence is the given sequence with some elements (possible none) left out. ...
- 1. 线性DP 1143. 最长公共子序列
最经典双串: 1143. 最长公共子序列 (LCS) https://leetcode-cn.com/problems/longest-common-subsequence/submissions/ ...
- Codeforces 1114D Flood Fill (区间DP or 最长公共子序列)
题意:给你n个颜色块,颜色相同并且相邻的颜色块是互相连通的(连通块).你可以改变其中的某个颜色块的颜色,不过每次改变会把它所在的连通块的颜色也改变,问最少需要多少次操作,使得n个颜色块的颜色相同. 例 ...
- [dp]LCS最长公共子序列
https://www.51nod.com/tutorial/course.html#!courseId=4 复杂度:${\rm O}(nm)$ 转移方程: #include<bits/stdc ...
- POJ-1458(LCS:最长公共子序列模板题)
Common Subsequence POJ-1458 //最长公共子序列问题 #include<iostream> #include<algorithm> #include& ...
- 动态规划1——最长递增子序列、最长公共子序列、最长公共子串(python实现)
目录 1. 最长递增序列 2. 最长公共子序列 3. 最长公共子串 1. 最长递增序列 给定一个序列,找出其中最长的,严格递增的子序列的长度(不要求连续). 解法一:动态规划 通过一个辅助数组记录每一 ...
随机推荐
- 学习c的第6天2
#include <stdio.h> #include <math.h> int main() { float num; printf("请输入该生当月的消费额:\n ...
- nginx学习笔记1
Nginx是使用c语言编写的,查看nginx编译时参数的设定 使用nginx -V命令查看 可以使用nginx -h命令查看命令帮助 配置文件中将worker process绑定到cpu的特定内核上 ...
- Firebird 修改表名
UPDATE RDB$RELATIONS SET RDB$RELATION_NAME='NEWNAME' where RDB$RELATION_NAME='OLDNAME'; UPDATE RDB$ ...
- 网页绘制图表 Google Charts with JavaScript #2 ....与ASP.NET网页结合 (ClientScriptManager.RegisterStartupScript 方法)
此为文章备份,原文出处(我的网站) 网页绘制图表 Google Charts with JavaScript #2 ....与ASP.NET网页结合 (ClientScriptManager.Regi ...
- pandas聚合和分组运算——GroupBy技术(1)
数据聚合与分组运算——GroupBy技术(1),有需要的朋友可以参考下. pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片.切块.摘要等操作.根据一个或多个 ...
- 7.python字符串-内置方法分析
上篇对python中的字符串内置方法进行了列举和简单说明,但这些方法太多,逐一背下效率实在太低,下面我来对这些方法按照其功能进行总结: 1.字母大小写相关(中文无效) 1.1 S.upper() -& ...
- FLEX AS3.0 百度地图
window xp系统 FlashBuilder4.5 先上百度下载flash api 下载地址http://developer.baidu.com/map/flash.htm 新建一个flex项目 ...
- javascripy的innerHTML在IE8下的异常
使用jQuery的datatable插件的时候发现,IE8下显示异常,仔细调查一番,发现是浏览器对innerHTML的差异导致的. 实例代码: var nTd = document.createEle ...
- angularjs2 学习笔记(六) Form
Angular 2 Form表单 在angular2 form表单中我们需要了解表单数据绑定.数据验证.数据提交等内容,在下面的示例中并没有实际提交到后台,这部分内容在今后webapi中加以练习. 表 ...
- C#(HTML)_小技巧_关于textbox框中不能输入HTML标签的解决方法(如输入“<p>”后,在提交表单时系统会崩溃)
主要修改文件是config文件(Web.config): 1.在<pages>标签中添加属性:validateRequest="false" <pages val ...