設有字串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:
cmcsnmn
2
輸出樣例#1:
10
這道題運用動態規劃的演算法。用f[i][j]表示第乙個序列取i個,第二個序列取j個的最大值。gx表示字元與空格的關係,a1[i]存第乙個字串中第i個字母的ascii碼,a2[i]存第二個字串中第i個字母的ascii碼。動規式如下:
f[i][j]=max(max(f[i-1][j]+gx, f[i][j-1]+gx, f[i-1][j-1]+ abs(a1[i]-a2[j]));
時間複雜度:o(len1*len2)
空間複雜度:o(n^n+2*n)
1 #include2 #include3 #include4 #include5using
namespace
std;
6int len1,len2,f[2001][2001],a1[2001],a2[2001
],gx;
7string
s1,s2;
8int
main ()
9
P1279 字串距離
p1279 字串距離 一看就是字串dp,然而並不會,騙分之後爆零了。以後dp題要好好想想轉移方程。f i j 表示是a串選了前i個字元,b串選了前j個字元的距離。顯然 qaq f i j min min f i 1 j k,f i j 1 k f i 1 j 1 abs a i b j 1 incl...
P1279 字串距離
轉移方程還是很容易想到 dp i,j min dp i 1 j 1 abs min dp i,j 1 dp i 1,j 1 但是我寫完之後發現答案就是不對 看完別人的code之後 才發現還要初始化!因為這個dp我們是對後面的字元進行操作 沒有包含到在第乙個字串前加入很多個空格 include inc...
洛谷 P1279 字串距離
設有字串x,我們稱在x的頭尾及中間插入任意多個空格後構成的新字串為x的擴充套件串,如字串x為 abcbcd 則字串 abcb cd a bcbcd 和 abcb cd 都是x的擴充套件串,這裡 代表空格字元。如果a1是字串a的擴充套件串,b1是字串b的擴充套件串,a1與b1具有相同的長度,那麼我捫定...