【简单dp】poj 1458 最长公共子序列【O(n^2)】【模板】
最长公共子序列可以用在下面的问题时:给你一个字符串,请问最少还需要添加多少个字符就可以让它编程一个回文串?
解法:ans=strlen(原串)-LCS(原串,反串);
Sample Input
abcfbc abfcab
programming contest
abcd mnp
Sample Output
4
2
0 代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <iostream>
#include <string>
#include <algorithm> using namespace std; char s[10100], t[10100];
int dp[10100][10100];
//dp[i+1][j+1]:表示序列s的前i个和序列t的前j个的最长公共子序列
//因为字符串从0下标开始存储的 dp[][]数组的0行 0列都被初始化为0
//比如说s[0]=t[0] 就会推出dp[0+1][0+1]=dp[0][0]+1=1
//dp[1][1]=1 也就是s的前1个和t的前1个序列中最长序列为1 int LCS()
{
int i, j;
int len1=strlen(s); int len2=strlen(t); for(i=0; i<len1; i++) dp[i][0]=0;
for(i=0; i<len2; i++) dp[0][i]=0; for(i=0; i<len1; i++){
for(j=0; j<len2; j++){
if(s[i]==t[j]) dp[i+1][j+1]=dp[i][j]+1; else
dp[i+1][j+1]=max(dp[i+1][j], dp[i][j+1]);
}
}
return dp[len1][len2];
} int main()
{
while(scanf("%s", s)!=EOF){
scanf("%s", t);
int ans=LCS();
printf("%d\n", ans );
}
return 0;
}
现在我修改了字符串开始存储的位置,这样:scanf("%s", s+1); 从下标1开始存储,注意 正确的 len=strlen(s+1);
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <iostream>
#include <string>
#include <algorithm> using namespace std; char s[10100], t[10100];
int dp[10100][10100];
//dp[i+1][j+1]:表示序列s的前i个和序列t的前j个的最长公共子序列
//因为字符串从0下标开始存储的 dp[][]数组的0行 0列都被初始化为0
//比如说s[0]=t[0] 就会推出dp[0+1][0+1]=dp[0][0]+1=1
//dp[1][1]=1 也就是s的前1个和t的前1个序列中最长序列为1 int LCS()
{
int i, j;
int len1=strlen(s+1); int len2=strlen(t+1); for(i=0; i<=len1; i++) dp[i][0]=0;
for(i=0; i<=len2; i++) dp[0][i]=0; for(i=1; i<=len1; i++){
for(j=1; j<=len2; j++){
if(s[i]==t[j]) dp[i][j]=dp[i-1][j-1]+1; else
dp[i][j]=max(dp[i-1][j], dp[i][j-1]);
}
}
return dp[len1][len2];
} int main()
{
while(scanf("%s", s+1)!=EOF){
scanf("%s", t+1);
int ans=LCS();
printf("%d\n", ans );
}
return 0;
}
【简单dp】poj 1458 最长公共子序列【O(n^2)】【模板】的更多相关文章
- POJ 1458 最长公共子序列(dp)
POJ 1458 最长公共子序列 题目大意:给出两个字符串,求出这样的一 个最长的公共子序列的长度:子序列 中的每个字符都能在两个原串中找到, 而且每个字符的先后顺序和原串中的 先后顺序一致. Sam ...
- POJ 1458 最长公共子序列
子序列就是子序列中的元素是母序列的子集,且子序列中元素的相对顺序和母序列相同. 题目要求便是寻找两个字符串的最长公共子序列. dp[i][j]表示字符串s1左i个字符和s2左j个字符的公共子序列的最大 ...
- POJ 1458 最长公共子序列 LCS
经典的最长公共子序列问题. 状态转移方程为 : if(x[i] == Y[j]) dp[i, j] = dp[i - 1, j - 1] +1 else dp[i, j] = max(dp[i - 1 ...
- Common Subsequence POJ - 1458 最长公共子序列 线性DP
#include <iostream> #include <algorithm> #include <string> #include <cstring> ...
- POJ 1458 Common Subsequence (DP+LCS,最长公共子序列)
题意:给定两个字符串,让你找出它们之间最长公共子序列(LCS)的长度. 析:很明显是个DP,就是LCS,一点都没变.设两个序列分别为,A1,A2,...和B1,B2..,d(i, j)表示两个字符串L ...
- POJ 1159 Palindrome-最长公共子序列问题+滚动数组(dp数组的重复利用)(结合奇偶性)
Description A palindrome is a symmetrical string, that is, a string read identically from left to ri ...
- HDU 1159 Common Subsequence --- DP入门之最长公共子序列
题目链接 基础的最长公共子序列 #include <bits/stdc++.h> using namespace std; ; char c[maxn],d[maxn]; int dp[m ...
- POJ 2250(最长公共子序列 变形)
Description In a few months the European Currency Union will become a reality. However, to join the ...
- hdu1243 dp (类最长公共子序列)
题意:射击演习中,已知敌人出现的种类顺序,以及自己的子弹种类顺序,当同种类的子弹打到同种类的敌人时会得到相应分数,问最多能得多少分. 这题的题意很好理解,而且模型也很常见,是带权值的类最长公共子序列问 ...
随机推荐
- SQL.Cookbook 读书笔记4 插入更新和删除
第四章 插入更新和删除 4.1 插入数据 ,'PROGRA','NEW YOURK'); 4.2 从一个表向另一个表中复制 insert into dept_east(deptno,dname,loc ...
- 错误命令“if not exist "\Dll" mkdir "\Dll" xcopy "\bin\Debug\*.*" "F:\647\VS项目\EtrolMes2014SY\Framework\Dll" /e /i /y”已退出,代码为 9009
分析错误 第一步:观察错误,发现plugin文件夹中未生成对应的编译文件. 第二步:XCOPY命令无法执行,百度xcopy为何无法执行 第三步,搜索,发现环境变量未配置正确. 就是环境变量path(大 ...
- iOS学习笔记(一)——ios搭建开发环境
好久就想试水IOS开发了,由于开发环境限制,一直局限于理论和虚拟机,近来入手了MacBook Pro,也来尝尝鲜,笔者也是现学现总结,如果有不足,请指正. IOS开发必备MAC OS X 另加一部iP ...
- HTML+CSS实现简单三级菜单
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java线程的5种状态及切换
ava中的线程的生命周期大体可分为5种状态. 1. 新建(NEW):新创建了一个线程对象. 2. 可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方 ...
- 在Tomcat配置JNDI数据源的三种方式
最近使用到了在tomcat下配置数据源的内容,在这里转载一篇文章记录下 转载自: http://blog.csdn.net/dyllove98/article/details/7706218 在我过去 ...
- Django中间件,信号,缓存
中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项 ...
- C#窗口的Load事件与Shown事件的差别
Load:在第一次显示窗口前发生. <pre name="code" class="csharp"> private void Form1_Load ...
- git原理:引用规格
引用规格(refspec):就是在 .git/config 里面那个配置远程仓库的东西 [remote "origin"]url = https://github.com/test ...
- 002-IP地址及分类以及子网掩码
一.概述 IP地址是一个4段2进制码组成的,每一段二进制码有8位,共32位二进制数.占用4个字节. IP地址是指互联网协议地址(Internet Protocol Address,又译为网际协议地址) ...