顺序对齐

题目描述

考虑两个字符串右对齐的最佳解法。例如,有一个右对齐方案中字符串是 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)的更多相关文章

  1. 2018.07.09 洛谷P2365 任务安排(线性dp)

    P2365 任务安排 题目描述 N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间 ...

  2. 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时的方案总数. 这个显然 ...

  3. 2018.08.16 洛谷P2029 跳舞(线性dp)

    传送门 简单的线性dp" role="presentation" style="position: relative;">dpdp. 直接推一推 ...

  4. 【洛谷P1854】花店橱窗 线性dp+路径输出

    题目大意:给定 N 个数字,编号分别从 1 - N,M 个位置,N 个数字按照相对大小顺序放在 M 个位置里,每个数放在每个位置上有一个对答案的贡献值,求一种摆放方式使得贡献值最大. 题解:一道典型的 ...

  5. 动态规划_线性dp

    https://www.cnblogs.com/31415926535x/p/10415694.html 线性dp是很基础的一种动态规划,,经典题和他的变种有很多,比如两个串的LCS,LIS,最大子序 ...

  6. 线性dp

    线性dp应该是dp中比较简单的一类,不过也有难的.(矩乘优化递推请出门右转) 线性dp一般是用前面的状态去推后面的,也有用后面往前面推的,这时候把循环顺序倒一倒就行了.如果有的题又要从前往后推又要从后 ...

  7. CH5102 Mobile Service【线性dp】

    5102 Mobile Service 0x50「动态规划」例题 描述 一个公司有三个移动服务员,最初分别在位置1,2,3处.如果某个位置(用一个整数表示)有一个请求,那么公司必须指派某名员工赶到那个 ...

  8. CH 5102 Mobile Service(线性DP)

    CH 5102 Mobile Service \(solution:\) 这道题很容易想到DP,因为题目里已经说了要按顺序完成这些请求.所以我们可以线性DP,但是这一题的状态不是很好设,因为数据范围有 ...

  9. [CodeForces - 1272D] Remove One Element 【线性dp】

    [CodeForces - 1272D] Remove One Element [线性dp] 标签:题解 codeforces题解 dp 线性dp 题目描述 Time limit 2000 ms Me ...

随机推荐

  1. DataSnap高级技术(7)—TDSServerClass中Lifecycle生命周期三种属性说明

    From http://blog.csdn.net/sunstone/article/details/5282666 DataSnap高级技术(7)—TDSServerClass中Lifecycle生 ...

  2. SAP订单状态最详细的解释

    order status description explanation CRTD 建立 生产订单创建时的状态,表明订单处于刚刚创建时点,不允许做后续发料,确认等操作. PREL 部分释放(部分下达) ...

  3. ABAP-关于COMMIT WORK 和COMMIT WORK AND WAIT

    转载:https://blog.csdn.net/champaignwolf/article/details/6925019 首先说明一点:更新是异步的,更新是由SAP中UPD1和UPD2两个进程执行 ...

  4. C++析构函数的自动调用问题

    首先要明确一点,系统只会自动释放栈内空间,而堆内空间需要用户自己维护. C++中,除了new来的空间存放在堆内,其他均存放在栈中. 当单纯的创建对象的时候,对象存放在栈中,此时在程序块的}后面,系统会 ...

  5. java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL

    今天学习spring+cxf的时候遇到一个问题:在web.xml中配置了spring的上下文监听器: <listener> <listener-class>org.spring ...

  6. ArcGIS案例学习笔记1_1

    ArcGIS案例学习笔记1_1 联系方式:谢老师,135_4855_4328, xiexiaokui#qq.com 时间:第一天上午 准备 0.U盘复制ArcGIS培训*** 1.练习数据不要放到桌面 ...

  7. Anaconda中python加入环境变量

    1.我的电脑---高级系统设置 2.选中环境变量,保存. 3.在系统环境变量PATH中,加入Anaconda3及Script路径加入其中 4.测试python

  8. pip批量更新安装的包

    ------------------pip批量更新库-------------------- 1)查看过期的库 pip list --outdated  更新单一的库: pip install --u ...

  9. java 注解 基本原理 编程实现

    摘要: java 1.5开始引入了注解和反射,正确的来说注解是反射的一部分,没有反射,注解无法正常使用,但离开注解,反射依旧可以使用,因此来说,反射的定义应该包含注解才合理一些. java 1.5开始 ...

  10. 通过NBU还原数据库提示LINKING异常,无法恢复数据

    错误提示: 解决方法: