【简单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 (类最长公共子序列)
题意:射击演习中,已知敌人出现的种类顺序,以及自己的子弹种类顺序,当同种类的子弹打到同种类的敌人时会得到相应分数,问最多能得多少分. 这题的题意很好理解,而且模型也很常见,是带权值的类最长公共子序列问 ...
随机推荐
- JDK之ThreadLocal分析
ThreadLocal是在是Thread的一个局部变量,今天我来分析了一下这个类 先看ThreadLocal的set方法 public void set(T value) { Thread t = T ...
- Docker学习(2Docker基本命令 )
1.首先我们需要明确在docker中需要了解的一些基础知识 Docker虚拟化有三个概念需要理解,分别镜像.容器.仓库. 1) 镜像:docker的镜像其实就是模板,跟我们常见的ISO镜像类似,是一个 ...
- 【BZOJ4176】Lucas的数论 莫比乌斯反演
[BZOJ4176]Lucas的数论 Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)) ...
- 《从零开始学Swift》学习笔记(Day 24)——枚举
原创文章,欢迎转载.转载请注明:关东升的博客 Swift中的枚举可以定义一组常量.提高程序的可读性:还具有面向对象特性. 使用enum关键词声明枚举类型,具体定义放在一对大括号内,枚举的语法格式如下 ...
- client-server model peer-to-peer architecture 主从式架构
w https://zh.wikipedia.org/wiki/主从式架构 主从式架构 (Client–server model) 或客户端-服务器(Client/Server)结构简称C/S结构,是 ...
- [转载]H5项目常见问题汇总及解决方案
本文转载自:http://www.open-open.com/lib/view/open1449325854077.html Meta基础知识: H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 / ...
- 扩展运算符和rest运算符
扩展运算符 扩展运算符用三个点号表示,功能是把数组或类数组对象展开成一系列用逗号隔开的值 一.拆分数组 扩展运算符可以直接把数组拆分成用逗号隔开的值 <template> <sect ...
- 我的Android进阶之旅------>修改Android签名证书keystore的密码、别名alias以及别名密码
转载于:http://blog.k-res.net/archives/1229.html 和 http://blog.k-res.net/archives/1671.html ADT允许自定义调试用 ...
- MapReduceTopK TreeMap
版权声明: https://blog.csdn.net/zhangxiango/article/details/33319281 MapReduce TopK统计加排序中介绍的TopK在mapredu ...
- activiti 发布异常 org.activiti.engine.ActivitiException: Error parsing XML
三月 23, 2015 1:58:31 下午 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() fo ...