DP专辑之最长公共子序列及其变形
vijos1111(裸的最长公共子序列)
链接:www.vijos.org/p/1111
题解:好久没有写最长公共子序列了,这题就当是复习了。求出最长公共子序列,然后用两个单词的总长度减去最长公共子序列
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=101;
int dp[maxn][maxn];
char a[maxn],b[maxn];
int main()
{
while(cin>>a>>b)
{
int n=strlen(a);
int m=strlen(b);
for(int i=0;i<n;i++) //最长公共子序列模板
for(int j=0;j<m;j++)
{
if(a[i]==b[j])
dp[i+1][j+1]=dp[i][j]+1;
else
dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]);
}
cout<<n+m-dp[n][m]<<endl;
}
return 0;
}
vijos1680(最长公共子序列的变形)
链接:www.vijos.org/p/1680
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn=2001;
int dp[maxn][maxn];
char a[maxn],b[maxn];
int minx(int x,int y,int z)
{
int ab=x;
if(y<ab) ab=y;
if(z<ab) ab=z;
return ab;
}
int main()
{
int k;
while(cin>>a>>b>>k)
{
int n=strlen(a);
int m=strlen(b);
for(int i=0;i<n;i++)
dp[i+1][0]=dp[i][0]+k;
for(int i=0;i<m;i++)
dp[0][i+1]=dp[0][i]+k;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
dp[i+1][j+1]=minx(dp[i][j+1]+k,dp[i+1][j]+k,dp[i][j]+abs(a[i]-b[j]));
cout<<dp[n][m]<<endl;
}
return 0;
}
vijos 1264(最长公共上升序列)
链接:www.vijos.org/p/1264
题解:用dp[i,j]表示a序列的前i个为结尾和以b序列的第j个为结尾的最长上升公共序列长度。则:
dp[i,j]=max{dp[i-1,k]}+1 | (a[i]=b[j]) and (b[k]<b[j])
dp[i,j]=dp[i-1,j] | (a[i]<>b[j])
程序里面在j循环顺带着就找到了最小的k。对于所有小于a[i]的b[k],必定在a[i]=b[j]时小于b[j],所以满足了约束条件。
最后再把i那维给降调。(为什么没有滚动,因为b[k]<>a[i],所dp[k]必定没有没修改)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=501;
int dp[maxn];
int a[maxn],b[maxn];
int main()
{
int t;
cin>>t;
while(t--)
{
int n,m;
cin>>n;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
cin>>m;
for(int i=1;i<=m;i++)
scanf("%d",&b[i]);
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++) //最长上升公共序列
{
int mx=0;
for(int j=1;j<=m;j++)
{
if(a[i]>b[j])
mx=max(mx,dp[j]);
else if(a[i]==b[j])
dp[j]=max(mx+1,dp[j]);
}
}
int mx=0;
for(int i=1;i<=m;i++)
if(mx<dp[i])
mx=dp[i];
cout<<mx<<endl;
}
return 0;
}
DP专辑之最长公共子序列及其变形的更多相关文章
- hdu5282 最长公共子序列的变形
pid=5282">http://acm.hdu.edu.cn/showproblem.php?pid=5282 Problem Description Xuejiejie loves ...
- HDU 1159 Common Subsequence --- DP入门之最长公共子序列
题目链接 基础的最长公共子序列 #include <bits/stdc++.h> using namespace std; ; char c[maxn],d[maxn]; int dp[m ...
- hdu1243 dp (类最长公共子序列)
题意:射击演习中,已知敌人出现的种类顺序,以及自己的子弹种类顺序,当同种类的子弹打到同种类的敌人时会得到相应分数,问最多能得多少分. 这题的题意很好理解,而且模型也很常见,是带权值的类最长公共子序列问 ...
- hdu1080 DP(类最长公共子序列)
题意,有两个字符串,分别由四个字母构成,字母之间有不同的相似度,允许在两个字符串都按原顺序排列的情况下进行字母与字母之间的匹配,也可以让字母与空格匹配,即相当于在字符串中间加空格来一一匹配,每个字母与 ...
- POJ 1458 Common Subsequence (DP+LCS,最长公共子序列)
题意:给定两个字符串,让你找出它们之间最长公共子序列(LCS)的长度. 析:很明显是个DP,就是LCS,一点都没变.设两个序列分别为,A1,A2,...和B1,B2..,d(i, j)表示两个字符串L ...
- 【dp】求最长公共子序列
[题目描述] 一个给定序列的子序列是在该序列中删去若干元素后得到的序列.确切地说,若给定序列X=<x1,x2,…,xm>X=<x1,x2,…,xm>,则另一序列Z=<z1 ...
- DP动态规划———LCS最长公共子序列
递推公式: ]==b[j-]) { dp[i][j]=dp[i-][j-]+; } else { dp[i][j]=max(dp[i-][j],dp[i][j-]); } 完整模板代码: int LC ...
- HDU 1080 Human Gene Functions - 最长公共子序列(变形)
传送门 题目大意: 将两个字符串对齐(只包含ACGT,可以用'-'占位),按照对齐分数表(参见题目)来计算最后的分数之和,输出最大的和. 例如:AGTGATG 和 GTTAG ,对齐后就是(为了表达对 ...
- hdu 1080 dp(最长公共子序列变形)
题意: 输入俩个字符串,怎样变换使其所有字符对和最大.(字符只有'A','C','G','T','-') 其中每对字符对应的值如下: 怎样配使和最大呢. 比如: A G T G A T G - G ...
随机推荐
- android test控件
1.Plain Text 输入文本框 <EditText android:id="@+id/editText" android:layout_width="wrap ...
- P1067 多项式输出 (模拟)
题目描述 一元nn次多项式可用如下的表达式表示: 其中,a_i x^i 称为i次项,ai 称为i次项的系数.给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式: 多项式中自变量 ...
- 【Todo】已经打开的页面需要清掉的坑
下面是当前我浏览器里面打开的技术文章.需要清掉.一个坑一个坑地填吧. 微信文件传输里面也有几篇12.6号的<Akuna Capital电面面经><2016最流行的Java EE服务器 ...
- SAP 锁对象 基本概念与基本操作 SE11
一.SAP为什么要设置锁: 1,保持数据的一致性 假设几个用户要訪问相同的资源,须要找到一种同步訪问的方法去保持数据的一致性.比方说,在航班预订系统中,须要检查还有没有空座位,当检 ...
- XUtils BitmapUtils 改造以加入drawable支持
=== XUtilsBitmapUtils 改造以加入drawable支持 === # XUtils 简单介绍 XUtils 是一套少有的早期国产安卓框架, 其源于AFinal, 文件夹结构也与之相似 ...
- 高速查询hive数据仓库表中的总条数
Author: kwu 高速查询hive数据仓库中的条数.在查询hive表的条数,通常使用count(*).可是数据量大的时候,mr跑count(*)往往须要几分钟的时间. 1.传统方式获得总条数例如 ...
- SVN——库合并
从下午開始做库的合并.刚開始一直将路径弄错.后来纠结至死的时候,finally and finally,succeed~ 库合并是这样子的: 如今,我要把项目1这个库合并到部门1的项目1目录中,为了 ...
- vim note (1)
'vim' go into the vim mode 'i' 'a' 's' is means insert mode 'v' is means visual mode 'esc' is mea ...
- 基于bootstrap_登陆页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Nova虚拟机启动提示libvirtError
OpenStack自动化安装基本折腾完毕,装一次大概也就10分钟,但是装完后今天我的虚拟机起不来,经过查找log发 现如下图提示: 已经到这里,说明已经过了nova-sheduler那一关,跟踪一下代 ...