P1279 字串距离 (动态规划)
题目描述
设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X的扩展串,这里“□”代表空格字符。
如果A1是字符串A的扩展串,B1是字符串B的扩展串,A1与B1具有相同的长度,那么我扪定义字符串A1与B1的距离为相应位置上的字符的距离总和,而两个非空格字符的距离定义为它们的ASCII码的差的绝对值,而空格字符与其他任意字符之间的距离为已知的定值K,空格字符与空格字符的距离为0。在字符串A、B的所有扩展串中,必定存在两个等长的扩展串A1、B1,使得A1与B1之间的距离达到最小,我们将这一距离定义为字符串A、B的距离。
请你写一个程序,求出字符串A、B的距离。
输入输出格式
输入格式:
输入文件第一行为字符串A,第二行为字符串B。A、B均由小写字母组成且长度均不超过2000。第三行为一个整数K(1≤K≤100),表示空格与其他字符的距离。
输出格式:
输出文件仅一行包含一个整数,表示所求得字符串A、B的距离。
输入输出样例
cmc snmn 2
Solution
很显然我还是欠缺了一些思路.这个DP我只想出来一半.后面还好是看了题解,其实思路一样.就是我预处理有一些问题.
作为一道DP题来看的话,这道题其实不是很难.
我们以 f [ i ] [ j ] 作为状态,也就是第一个字串的第 i 位和第二个字符串的第 j 位 的最优解.
读完题就可以知道每一个位置的字符只有两种情况 :
1.当前第一个字符串里第 i 的字符与一个空格匹配.
2.当前第一个字符串里第 i 的字符与第二个字符串里面第 j 个字符匹配.
也就是说 每个 f [ i ] [ j ] 有三种前导状态:
1. f [ i-1 ] [ j ] 此时也就是第一个字符串的第 i 个与一个空格匹配.
2. f [ i ] [ j-1 ] 此时是第二个字符串的第 j 个与一个空格匹配.
3. f [ i-1 ] [ j-1 ] 此时也就是当前 i 和 j 两个字符匹配即可.
所以动态转移方程就可以推出来了.
需要注意的是预处理. 需要兼顾到每一个字符与一个空串的匹配状况.
代码
#include<bits/stdc++.h> using namespace std; int f[2008][2008]; char ch1[2008],ch2[2008]; int len1,len2,kk; int main() {scanf("%s",ch1);scanf("%s",ch2);cin>>kk;len1=strlen(ch1);len2=strlen(ch2);for(int i=1;i<=len1;i++) f[i][0]=f[i-1][0]+kk;for(int i=1;i<=len2;i++) f[0][i]=f[0][i-1]+kk;//预处理部分需要注意for(int i=1;i<=len1;i++)for(int j=1;j<=len2;j++){f[i][j]=min(min(f[i-1][j]+kk,f[i][j-1]+kk),f[i-1][j-1]+abs(ch1[i-1]-ch2[j-1]));}cout<<f[len1][len2]<<endl;return 0; }
转载于:https://www.cnblogs.com/Kv-Stalin/p/8856071.html
P1279 字串距离 (动态规划)相关推荐
- P1279 字串距离【动规】
P1279 字串距离 link 思路: 设f[i][j]表示A字符串为i的前缀,B字符串为j的前缀的最小距离. 对于f[i][0](i ~ l e n A ) len_A) lenA), f[0][ ...
- 洛谷P1279 字串距离 (动态规划)
题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为"abcbcd",则字符串"abcb□cd"," ...
- 【DP】字串距离(luogu 1279)
字串距离 luogu 1279 题目大意 给出两个字符串,让你加上若干空格,使其长度相同 对于第i位,如果都是字母那代价就是ASCII码的差值,如果一个是字母那就是k,如果没有一个是字母那就是0,让你 ...
- 洛谷1279 字串距离
题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为"abcbcd",则字符串"abcb□cd"," ...
- 最长公共子序列(LCS)问题 Longest Common Subsequence 与最长公告字串 longest common substr...
问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y=& ...
- 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串
1. 最长回文串 一般用后缀数组或者后缀树可以解决, 用此方法:http://blog.csdn.net/v_july_v/article/details/6897097 预处理后缀树,使得查询LCA ...
- leetcode必刷题(四)lee75 颜色分类、lee76 最小覆盖字串、lee78 子集、lee79 单词搜索、lee84 柱状图中最大的矩形、lee85 最大矩形、lee96 不同的二叉搜索树、
lee75 颜色分类 patition 三个指针 lee76 最小覆盖字串 滑动窗口 lee78 子集 无重复数字 回溯 lee79 单词搜索 回溯 lee84 柱状图中最大的矩形 单调栈 lee85 ...
- LeetCode中等题之无重复字符的最长字串
题目 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 &q ...
- 使用XML在MSSQL把字串分解
今天要在mssql里处理一串Email地址.以分号分开的.以前自己写过一个split函数的.这次想使用xml来处理. mssql 2000和mssql 2005数据库对xml的支持有些不同.至少mss ...
最新文章
- How does SGD weight_decay work?
- echarts 饼图每块颜色_读者提问,如何让 tooltip 提示框内显示饼图
- java日期大小比较(亲测)
- 单点登录Redis存储Session及SessionId问题说明与集群实战-4
- 【2020牛客NOIP赛前集训营-提高组(第二场)】题解(GCD,包含,前缀,移动)
- IIS+ASP部署相关
- linux bash 获取 国内常见网站的IP列表
- Nordic Blue Tooth
- 程序员人生:技术人员的职业发展规划
- 前端偶数行有底纹怎么写_如何在Excel中的替代行上应用底纹
- 桌面放大镜、演示工具推荐——ZoomIt
- mysql 赋权_《MySQL数据库》MySQL用户赋权
- iOS8 定位新增功能
- 微信公众号图片素材一键删除小工具
- 3.1 该如何编写程序界面
- iphone计算机能算度分秒吗,App Store 上的“iFxCalc:最人性化的函数计算器,支持自定义中文函数”...
- java对接旺店通数据同步
- 如何避免编程从入门到放弃?
- 线程局部变量 ThreadLocal
- Qt Creator Windows 修改外观字体
热门文章
- 苹果air3安兔兔html5是什么,iPad Air3什么时候上市?我们期待的苹果iPad Air3是什么样?(2)...
- 在 k8S 中搭建 SonarQube 7.4.9 版本(使用 PostgreSQL 数据库)
- “杭银理财”杯浙江工业大学大学生程序设计竞赛暨全国邀请赛 签到题9题
- 【软考】《希赛教育·软件设计师考前冲刺与考点分析》计算机硬件基础知识——学习笔记
- 2021牛客暑期多校训练营3,签到题BEFJ
- 【NOIP2001】【Luogu1027】Car的旅行路线
- linux shell rsync,linux – 如何在我的下面的shell脚本中使用rsync而不是scp来复制文件?...
- 贪心算法无重叠区间c语言,贪心算法之区间问题.md
- 服务器开机信号,机柜服务器BMC开关机控制系统及方法
- 单通道图像保存_3D图像展示篇结构更清晰