2018.07.09 顺序对齐(线性dp)
顺序对齐
题目描述
考虑两个字符串右对齐的最佳解法。例如,有一个右对齐方案中字符串是 AADDEFGGHC 和 ADCDEGH。
AAD~DEFGGHC
ADCDE~~GH~
每一个数值匹配的位置值 2 分,一段连续的空格值 -1 分。所以总分是匹配点的 2 倍减去连续空格的段数,在上述给定的例子中,6 个位置 (A,D,D,E,G,H) 匹配,三段空格,所以得分 2*6+(-1)*3=9,注意,我们并不处罚左边的不匹配位置。若匹配的位置是两个不同的字符,则既不得分也不失分。
请你写个程序找出最佳右对齐方案。
输入格式
输入文件包含两行,每行一个字符串,最长 50 个字符。字符全部是大字字母。
输出格式
输出一个整数,为最佳对齐的得分。
样例数据 1
输入
AADDEFGGHC
ADCDEGH
输出
9
一道一眼题,一看就是基础dp" role="presentation" style="position: relative;">dpdp,设f[i][j]" role="presentation" style="position: relative;">f[i][j]f[i][j]表示a" role="presentation" style="position: relative;">aa串中第i" role="presentation" style="position: relative;">ii个跟b" role="presentation" style="position: relative;">bb串中第j" role="presentation" style="position: relative;">jj个匹配时收益最大值。这样状态转移方程就很显然了吧。我们知道两个字串在同样的位置出现空格是不优秀的。这样的话,f[i][j]" role="presentation" style="position: relative;">f[i][j]f[i][j]就只能由f[i−1][k]" role="presentation" style="position: relative;">f[i−1][k]f[i−1][k]和f[k][j−1]" role="presentation" style="position: relative;">f[k][j−1]f[k][j−1]推出来,最后统计答案就行了。
代码如下:
#include<bits/stdc++.h>
using namespace std;
char a[55],b[55];
int la,lb,f[55][55],ans=0;
int main(){
scanf("%s%s",a+1,b+1);
la=strlen(a+1),lb=strlen(b+1);
memset(f,0,sizeof(f));
for(int i=1;i<=la;++i)if(a[i]==b[1])f[i][1]=2;
for(int i=1;i<=lb;++i)if(a[1]==b[i])f[1][i]=2;
for(int i=2;i<=la;++i)
for(int j=2;j<=lb;++j){
f[i][j]=f[i-1][j-1];
for(int k=1;k<i-1;++k)f[i][j]=max(f[k][j-1]-1,f[i][j]);
for(int k=1;k<j-1;++k)f[i][j]=max(f[i-1][k]-1,f[i][j]);
f[i][j]+=2*(a[i]==b[j]);
}
for(int i=1;i<=la;++i)ans=max(ans,f[i][lb]-1*(i!=la));
for(int i=1;i<=lb;++i)ans=max(ans,f[la][i]-1*(i!=lb));
printf("%d",ans);
return 0;
}
2018.07.09 顺序对齐(线性dp)的更多相关文章
- 2018.07.09 洛谷P2365 任务安排(线性dp)
P2365 任务安排 题目描述 N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间 ...
- 2018.09.21 codeforces1051D. Bicolorings(线性dp)
传送门 sb线性DP. f[i][j][0/1/2/3]f[i][j][0/1/2/3]f[i][j][0/1/2/3]表示前i列j个连通块且第i列状态为00/01/10/11时的方案总数. 这个显然 ...
- 2018.08.16 洛谷P2029 跳舞(线性dp)
传送门 简单的线性dp" role="presentation" style="position: relative;">dpdp. 直接推一推 ...
- 【洛谷P1854】花店橱窗 线性dp+路径输出
题目大意:给定 N 个数字,编号分别从 1 - N,M 个位置,N 个数字按照相对大小顺序放在 M 个位置里,每个数放在每个位置上有一个对答案的贡献值,求一种摆放方式使得贡献值最大. 题解:一道典型的 ...
- 动态规划_线性dp
https://www.cnblogs.com/31415926535x/p/10415694.html 线性dp是很基础的一种动态规划,,经典题和他的变种有很多,比如两个串的LCS,LIS,最大子序 ...
- 线性dp
线性dp应该是dp中比较简单的一类,不过也有难的.(矩乘优化递推请出门右转) 线性dp一般是用前面的状态去推后面的,也有用后面往前面推的,这时候把循环顺序倒一倒就行了.如果有的题又要从前往后推又要从后 ...
- CH5102 Mobile Service【线性dp】
5102 Mobile Service 0x50「动态规划」例题 描述 一个公司有三个移动服务员,最初分别在位置1,2,3处.如果某个位置(用一个整数表示)有一个请求,那么公司必须指派某名员工赶到那个 ...
- CH 5102 Mobile Service(线性DP)
CH 5102 Mobile Service \(solution:\) 这道题很容易想到DP,因为题目里已经说了要按顺序完成这些请求.所以我们可以线性DP,但是这一题的状态不是很好设,因为数据范围有 ...
- [CodeForces - 1272D] Remove One Element 【线性dp】
[CodeForces - 1272D] Remove One Element [线性dp] 标签:题解 codeforces题解 dp 线性dp 题目描述 Time limit 2000 ms Me ...
随机推荐
- Java 权限框架 Shiro 实战二:与spring集成、filter机制
转自:https://www.cnblogs.com/digdeep/archive/2015/07/04/4620471.html Shiro和Spring的集成,涉及到很多相关的配置,涉及到shi ...
- IP Editor IP控件
HWND hIpEdit; void __fastcall TForm2::FormCreate(TObject *Sender) { hIpEdit = CreateWindow(WC_IPADDR ...
- 揭秘Java架构技术体系
Web应用,最常见的研发语言是Java和PHP. 后端服务,最常见的研发语言是Java和C/C++. 大数据,最常见的研发语言是Java和Python. 可以说,Java是现阶段中国互联网公司中,覆盖 ...
- jd-eclipse反编译插件的在线安装和使用
jd-eclipse反编译插件的在线安装和使用 JD-Eclipse是一个Eclipse平台的插件.它允许您调试所有的Java源代码,有了它,以后调试的时候ctrl键就可以一键到底啦.下面简单说说ec ...
- python 网页爬虫,下载网络图片
# coding=utf-8 import lxml,bs4,re,requests csvContent='' file = open('D:\\tyc_demo.html','rb') soup ...
- 面向过程中的局部变量(global)
1.school = 'oldboy.edu' def change_name(name): school = " Mage Linux" # 局 ...
- Python中的操作符重载
运算符重载是指在方法中拦截内置的操作----当类的实例出现在内置操作中,Python会自动调用自定义的办法,并且返回自定义方法的操作结果. 类可以重载python的操作符 操作符重载使我们的对 ...
- 趣味编程:CPS风格代码(C#,F#版)
CPS风格代码(C#版) using System; namespace fp { class CPS { static int add(int x, int y) => x + y; stat ...
- python 学习备忘
list列表排序 def listdir(path): #返回一个排序后的目录list files=os.listdir(path) files.sort(key=lambda x:str(x[:-4 ...
- scala 基本语法
1.对于一个二元数组,键值对(k,v) 用map的时候,要取第一个或者第二个元素,用 _1 或者 _2表示. scala> words.take(2)res40: Array[(String, ...