2016東莞市特長生考試 字串距離
description
設有字串 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 的距離。
input
從檔案 blast.in 中讀入資料,輸入檔案第一行為字串 a,第二行為字串 b。
a、b 均由小寫字母組成且長度均不超過 2000。第三行為乙個整數 k(1≤k≤100),
表示空格與其他字元的距離。
output
輸出到檔案 blast.out 中,僅一行包含乙個整數,表示所求得字串 a、b 的距離。
分析:和最長公共子串差不多的動態規劃,f[i,j]表示a串中前i個字元與b串中前j個字元的最短距離,a[i]表示a中第i位字元的ascll碼
f[i,j]=min(f[i-1,j]+k,f[i,j-1]+k,f[i-1,j-1]+abs(a[i]-b[j]))
**
const
maxn=2000;
varf:array[0..maxn,0..maxn] of longint;
a,b:array[0..maxn] of longint;
s1,s2:ansistring;
i,j,k,n:longint;
function min(x,y:longint):longint;
begin
if xend;
begin
readln(s1);
readln(s2);
readln(k);
for i:=1 to length(s1) do
a[i]:=ord(s1[i]);
for i:=1 to length(s2) do
b[i]:=ord(s2[i]);
for i:=1 to length(s1) do
f[i,0]:=i*k;
for i:=1 to length(s2) do
f[0,i]:=i*k;
for i:=1 to length(s1) do
for j:=1 to length(s2) do
begin
f[i,j]:=f[i-1,j]+k;
f[i,j]:=min(f[i,j],f[i,j-1]+k);
f[i,j]:=min(f[i,j],f[i-1,j-1]+abs(a[i]-b[j]));
end;
writeln(f[length(s1),length(s2)]);
end.
2016東莞市特長生考試 遊戲問題
2016東莞市特長生考試 遊戲問題 description 五四 青年節到了,某學校要舉行乙個遊園活動,其中有乙個這樣的遊戲 n 個同學 編號從 0 到 n 1 圍坐一圈,按照順時針方向給 n 個位置編號,從0 到 n 1。最初,第 0 號同學在第 0 號位置,第 1 號同學在第 1 號位置,依此類...
2016東莞市特長生考試 子數整數
對於乙個五位數,可將其拆分為三個數字 sub1 a1a2a3,sub2 a2a3a4,sub3 a3a4a5 現在給定乙個正整數 k,要求你程式設計求出 10000 包括 10000 到 30000 包括 30000 之間所有滿足下述條件的五位數,條件是這些五位數的三個子數 sub1,sub2,su...
2016東莞市特長生考試 村莊重建
2016東莞市特長生考試 村莊重建 time limit 10000ms memory limit 256000k total submit 3 accepted 1 case time limit 1000ms description b 地區在 過後,所有村莊都造成了一定的損毀,而這場 卻沒對公...