Luogu 1279 字串距離(dp)

2021-08-17 22:03:53 字數 885 閱讀 9324

設有字串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),表示空格與其他字元的距離。

題解:在考慮整個字串得不到思路時,應該想到由區域性最優解去推導全域性最優解,於是才能想到dp。定義f[i][j]為a串前i個字元與b串前j個字元的「最短距離」,然後分三種情況轉移即可。此題充分體現了dp的優越性,尤其是在整體考慮弄得人焦頭爛額之後。。。。。。

#include#include#include#includeusing namespace std;

const int n=2004;

int f[n][n];

int k,n,m;

char a[n],b[n];

inline void smin(int &a,int b)

int main()

printf("%d\n",f[n][m]);

return 0;

}

洛谷 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具有相同的長度,那麼我捫定...

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...