codevs2180 字串距離

2021-08-08 17:44:54 字數 1043 閱讀 7280

題目描述 description

設有字串x,我們稱在x的頭尾及中間插入任意多個空格後構成的新字串為x的擴充套件串,如字串x為「abcbcd」,則字串「abcb□cd」,「□a□bcbcd□」和「abcb□cd□」都是x的擴充套件串,這裡「□」代表空格字元。

如果a1是字串a的擴充套件串,b1是字串b的擴充套件串,a1與b1具有相同的長度,那麼我們定義字串a1與b1的距離為相應位置上的字元的距離總和,而兩個非空格字元的距離定義為它們的ascii碼的差的絕對值,而空格字元與其它任意字元之間的距離為已知的定值k,空格字元與空格字元的距離為o。在字串a、b的所有擴充套件串中,必定存在兩個等長的擴充套件串a1、b1,使得a1與b1之間的距離達到最小,我們將這一距離定義為字串a、b的距離。

請你寫乙個程式,求出字串a、b的距離。

輸入描述 input description

輸入檔案第一行為字串a,第二行為字串b,a、b均由小寫字母組成且長度均不超過2000,第三行為乙個整數k,表示空格與其它字元的距離。

輸出描述 output description

輸出檔案僅一行包含乙個整數,表示要求的字串a、b的距離。

樣例輸入 sample input

cmcsnmn2

樣例輸出 sample output 10

資料範圍及提示 data size & hint

1≤k≤100

關鍵:①狀態還是很好設的

②遇到空格這種有點懵,可以分類別,兩個分別是空格和兩個都不是空格,取min即可

③兩個對應的位置都是空格是沒有意義的

④賦初值!

假設全部都是空格 那麼f[i][0]就應該是k*i

一開始把*i給省去了 wa的臉懵

所以dp一定要考慮清楚初值是什麼

非常非常非常重要

#includeusing namespace std;

template void read(t &x)

string a,b;

int k;

int f[2001][2001];

int main()

cout<

codevs 1099 字串變換

題目描述 description 已知有兩個字串 a,b 及一組字串變換的規則 至多6個規則 a1 b1 a2 b2 規則的含義為 在 a 中的子串 a1可以 變換為b 1 a2可以 變換為b 2 例如 a abcd b xyz 變換規則為 abc xu ud y y yz 則此時,a可以 經過一系...

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