动态规划:LCS
先上状态转移方程,还是很容易看明白的

例题是Codevs的1862,这个题不是实现了方程就可以了的,还要完成一个事情那就是计数,数一数到底有多少个最长公共子序列
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
const int p=1e8;
char a[maxn],b[maxn];
int dp[maxn][maxn],f[maxn][maxn];
int main()
{
scanf("%s%s",a+,b+);
int al=strlen(a+)-;
int bl=strlen(b+)-;
for(int i=;i<=al;i++) f[i][]=;
for(int i=;i<=bl;i++) f[][i]=;
for(int i=;i<=al;i++)
for(int j=;j<=bl;j++)
{
if(a[i]==b[j])
{
dp[i][j]=dp[i-][j-]+;
int k1=,k2=;
if(dp[i][j]==dp[i-][j]) k1=;
if(dp[i][j]==dp[i][j-]) k2=;
f[i][j]=f[i-][j-]+(k1*f[i-][j])+(k2*f[i][j-]);
f[i][j]=(f[i][j]+p)%p;
}
else
{
dp[i][j]=max(dp[i-][j],dp[i][j-]);
int k1=,k2=,k3=;
if(dp[i][j]==dp[i-][j]) k1=;
if(dp[i][j]==dp[i][j-]) k2=;
if(dp[i][j]==dp[i-][j-]) k3=;
f[i][j]=(k1*f[i-][j])+(k2*f[i][j-])-(k3*f[i-][j-]);
f[i][j]=(f[i][j]+p)%p;
}
}
printf("%d\n%d\n",dp[al][bl],f[al][bl]);
return ;
}
在这里我们用dp记录长度,用f记录个数
由于输入是以“.”结尾的,所以读入的时候有些许的变化
scanf("%s%s",a+,b+);
int al=strlen(a+)-;
int bl=strlen(b+)-;
这样读入的时候真正的字符串的下标是从a+1开始的,循环的时候从1开始循环,到strlen(a+1)结束
因为结尾字符不属于串,所以给al--就好了
动态规划:LCS的更多相关文章
- 算法起步之动态规划LCS
原文:算法起步之动态规划LCS 前一篇文章我们了解了什么是动态规划问题,这里我们再来看动态规划另一个经典问题,最长公共子序列问题(LCS),什么是子序列,我们定义:一个给定序列将其中的0个或者多个元素 ...
- POJ1080 Human Gene Functions 动态规划 LCS的变形
题意读了半年,唉,给你两串字符,然后长度不同,你能够用'-'把它们补成同样长度,补在哪里取决于得分,它会给你一个得分表,问你最大得分 跟LCS非常像的DP数组 dp[i][j]表示第一个字符串取第i个 ...
- 动态规划-LCS最长公共子序列
#include<iostream> #include<cstdio> #include<cstring> #include<string> using ...
- 动态规划 LCS,LIS
1.最大连续子序列 dp[i]=max(dp[i-1]+a[i],a[i]) 以i为结尾 2.最大不连续子序列 dp[i]=max(dp[j]+a[i],dp[j]) 3.最大连续递增子序列 if a ...
- DP动态规划———LCS最长公共子序列
递推公式: ]==b[j-]) { dp[i][j]=dp[i-][j-]+; } else { dp[i][j]=max(dp[i-][j],dp[i][j-]); } 完整模板代码: int LC ...
- Luogu2543[AHOI2004]奇怪的字符串 (动态规划 LCS)
04年的省选这么water吗,开个滚动数组算了 #include <iostream> #include <cstdio> #include <cstring> # ...
- UVA 10066 The Twin Towers(LCS)
Problem B The Twin Towers Input: standard input Output: standard output Once upon a time, in an anci ...
- LCS最大公共子序列问题
在生物应用中,经常需要比较两个(或多个)不同生物体的DNA, 例如:某种生物的DNA可能为S1=ACCGGTCGAGTGCGCGGAAGCCGGCCGAA, 另一种生物的DNA可能为S2=GTCGTT ...
- 2016级算法期末上机-G.中等·Bamboo's Fight with DDLs II
中等·Bamboo's Fight with DDLs II 分析 一句话:给定字符串,求最长回文子序列长度,动态规划LCS思想的进阶应用 具体思路如下: 对于任意字符串,如果头尾字符相同,那么字符串 ...
- 动态规划之最长公共子序列(LCS)
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...
随机推荐
- 初步学习pg_control文件之四
接前文,初步学习pg_control文件之三 继续分析 何时出现 DB_SHUTDOWNING状态: 在正常的shutdown的时候,需要进行checkpoint,所以就在此处,设置pg_contr ...
- javascript代码规范 [转]
原文:http://www.css88.com/archives/5366 全局命名空间污染与 IIFE 总是将代码包裹成一个 IIFE(Immediately-Invoked Function Ex ...
- 让Dreamweaver支持cshtml (MVC Razor环境)
介绍:让Dreamweaver支持cshtml 正文: 如题,刚才搜了很久,都搜不到答案,幸好得到“包大人”(同事)的帮助,才得以解决. DW支持很多文件类型的代码提示,可是类型太多,不可能全部都有, ...
- CodeForces-1132F Clear the String
题目链接 https://vjudge.net/problem/CodeForces-1132F 题面 Description You are given a string \(s\) of leng ...
- 1030 Travel Plan (30 分)(最短路径 and dfs)
#include<bits/stdc++.h> using namespace std; ; const int inf=0x3f3f3f3f; int mp[N][N]; bool vi ...
- 树莓派搭建 Hexo 博客(二)
Hexo 一个开源的博客框架,本文记录了一下在树莓派上搭建 Hexo 博客的过程. 上一篇介绍了 Hexo 的配置,现在网站已经能在本地访问了,也能通过 hexo generate 命令生成静态界面 ...
- Julia 学习笔记(一):数组
个人向,只会记录一些需要注意的点. 前言 学习 Julia 已经有一段时间了,但是进步缓慢.这一方面是最近代码写得少,一方面是 Julia 学习资料少.中文资料更少,但也有我没做笔记的缘故导致学习效率 ...
- POJ 2082 Terrible Sets(栈)
Description Let N be the set of all natural numbers {0 , 1 , 2 , . . . }, and R be the set of all re ...
- arm单板上移植gdb
虚拟机 : vmware 12 image: ubuntukylin 14.04.1 系统版本:Linux dancy 3.13.0-32-generic #57-Ubuntu SMP Tue Jul ...
- JMS实战——ActiveMQ
安装 官网下载地址:http://activemq.apache.org/ 小编这里以5.9.0版本为例,做简单介绍. 下载之后解压到制定路径,目录结构如下: 启动 直接运行bin下的activemq ...