洛谷1279 字串距離

2022-05-12 12:48:10 字數 984 閱讀 1655

題目描述

設有字串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的距離。

輸入輸出樣例

輸入樣例#1: 複製

cmc

snmn

2 輸出樣例#1: 複製

10dp[i][j]代表a串第i個字元與b串第j個字元的最小距離。

dp轉移方程,dp[i][j]=min(dp[i-1][j]+k,min(dp[i][j-1]+k,dp[i-1][j-1]+abs(a[i]-b[j])))

就是代表從a串為空格,b串為空格,或都不為空格中選出最小值。

#include

using

namespace

std;

const

int maxn = 2005;

int dp[maxn][maxn],k;

char a[maxn],b[maxn];

int main()

洛谷 1279 字串距離

設有字串x,我們稱在x的頭尾及中間插入任意多個空格後構成的新字串為x的擴充套件串,如字串x為 abcbcd 則字串 abcb cd a bcbcd 和 abcb cd 都是x的擴充套件串,這裡 代表空格字元。如果a1是字串a的擴充套件串,b1是字串b的擴充套件串,a1與b1具有相同的長度,那麼我捫定...

洛谷 P1279 字串距離

設有字串x,我們稱在x的頭尾及中間插入任意多個空格後構成的新字串為x的擴充套件串,如字串x為 abcbcd 則字串 abcb cd a bcbcd 和 abcb cd 都是x的擴充套件串,這裡 代表空格字元。如果a1是字串a的擴充套件串,b1是字串b的擴充套件串,a1與b1具有相同的長度,那麼我捫定...

DP 洛谷P1279 字串距離

轉換題意,可以得知 多餘的空格是沒有用的 乙個字母要麼和另一串的字母匹配要麼就與空格匹配 無後效性 設 f i j f i j f i j 為 第乙個串處理完i個,第二個串處理完j個的最小距離 dp方程 f i j min 第乙個串的字元匹空格,第二個串的字元匹空格,上下串字元匹配 include ...