字符串类DP Align

来源:互联网 发布:c语言为什么要指针 编辑:程序博客网 时间:2024/05/01 12:15
【问题描述】

考虑两个字符串右对齐的最佳解法。例如,有一个右对齐方案中字符串是AADDEFGGHC和ADCDEGH。

AAD_DEFGGHC

ADCDE__GH_

每一个数值匹配的位置值2分,一段连续的空格值-1分。所以总分是匹配点的2倍减去连续空格的段数,在上述给定的例子中,6个位置(A,D,D,E,G,H)匹配,三段空格,所以得分2*6+(-1)*3=9,注意,我们并不处罚左边的不匹配位置。若匹配的位置是两个不同的字符,则既不得分也不失分。

请你写个程序找出最佳右对齐方案。



【输入文件】

输入文件包含两行,每行一个字符串,最长50个字符。字符全部是大字字母。



【输出文件】

一行,为最佳对齐的得分。



【输入输出样例】

输入:AADDEFGGHC

            ADCDEGH




输出:

9


这道题,2年前看到过他,不会做。

                去年看见过他,看不懂题解。

                其实现在也是迷迷糊糊的,不过像这种字符串字符串匹配的,都是一类问题。比如今年NOIP substring,我就是不会做=====。

              

    思路应该是很清晰的,和LCS的动归解法一样,两个字符串每个位子上去比较,问题是如何比。

  F[i][j] 表示 匹配到 s1[i] 和 s2[j] 的最优值


 首先: s1[i] == s2[i] 很好处理: F[i][j] = F[i-1][j-1] + 2 (2分一个匹配位置)

 

但如果不等于,该怎么办?

          看上面的 F[i][j] = F[i-1][j-1] + 2,是不是有些想法?

          如果 i == j 也许就是这样,但如果不一样呢? 不是还有空格吗?

          所以我们要做的是当 s1[i] != s2[j] 的时候,把空格往上‘顶’,以便于相等时的处理

          自然想到去 F[1~i][j],F[i][1~j] 的最大值,并减去1(空格扣分)

          这种情况下最后如果位子不足会多减1,符合题意,计算右边的空格值。


#include <iostream>#include <cstring>#include <string>#define N 101using namespace std;int f[N][N];string str1,str2;;int main(){cin >> str1 >> str2;int sz1 = str1.size();int sz2 = str2.size();for (int i = 1; i <= sz1 ; ++i)  for (int j = 1; j <=sz2 ; ++j)  {   if(str1[i-1] == str2[j-1]) f[i][j] = f[i-1][j-1] + 2; //如果匹配,对于f(i-1,j-1)+2分肯定是最好 else { for (int k = 1; k < i; ++k)   f[i][j] = max(f[i-k][j] - 1,f[i][j]); for (int k = 1; k < j; ++k)   f[i][j] = max(f[i][j-k] - 1,f[i][j]); f[i][j] = max(f[i-1][j-1],f[i][j]); }      }  cout << f[sz1][sz2] << endl;}



    

       











0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 海信电视保修期内主板坏了怎么办 乐视电视的主板坏了怎么办 车电瓶没电了打不着火怎么办 面包车没电了打不着火怎么办 汽车电瓶没电了打不着火怎么办 自动挡的车没有电打不起来火怎么办 自动挡汽车没电了打不着火怎么办 自动挡小车没电了打不着火怎么办 被4s店销售骗了怎么办 宇通客车尿素泵不工作怎么办 汽车打蜡不小心打在车帮怎么办 海信电视怎么安装第三方软件怎么办 网上买票的时候不想用学生票怎么办 南方公园完整破碎讲话嘴不动怎么办 同一个安全员被锁在两个项目怎么办 家长拖欠家教老师的课时费怎么办 合同没到期房东不退押金怎么办 租房合同没到期房东要违约怎么办 档案存放费交了一年的延期怎么办 天津房子卖了户口没地方迁怎么办 中国到美国读计算机硕士签证怎么办 在江苏大学去德国读研怎么办? 宿舍上下铺的床一动就响怎么办 自助取款机存款忘打印了凭条怎么办 高一新生跨省转学籍怎么办 网上买票不小心买成了学生票怎么办 做横幅标语字打出来老是歪的怎么办 创业板股票暂停上市后钱怎么办 新股东入股公司之前的亏损怎么办 目前公司账面亏损有人要入股怎么办 土地确权后没有土地的人怎么办 老板不发工资跑路了怎么办 别人登录了我的美团账号怎么办 月嫂家政公司快坚持不下去了怎么办 华硕飞马4a手机发热怎么办 超级必发指数手机页面没曲线怎么办 唐小僧理财暴雷了投资者该怎么办 教师资格证面试准考证号忘了怎么办 初中学校说处分不给毕业证怎么办? 自动档一键打火的车没电了怎么办 物流代收货款一直拿不到钱怎么办