例4 lcs(最長公共子串行)
乙個給定序列的子串行是在該序列中刪去若干元素後得到的序列。確切地說,若給定序列x=<>,若另一串行z=<>是x的子串行,是指存在乙個嚴格遞增的下標序列<>,使得對於所有j=1,2,…,k有
例如,序列z=
是序列x=
的子串行,相應的遞增下標序列為
<2,3,5,7>
。
給定兩個序列x和y
,當另一串行z既是
x的子串行又是
y的子串行時,稱
z是序列x和
y的公共子串行。例如,若x=和
y=,則序列是x
和y的乙個公共子串行,序列也是x
和y的乙個公共子串行。而且,後者是x和
y的乙個最長公共子串行,因為x和
y沒有長度大於
4的公共子串行。
最長公共子串行(lcs)
問題:給定兩個序列
x=<>和
y=<>,要求找出x和
y的乙個最長公共子串行。
輸入檔案:
第一行為乙個整數n(1≤n≤5000),表示
x序列的長度;
第二行為長度為n的x
序列;
第三行為乙個整數m(1≤m≤5000),表示
y序列的長度;
第四行為長度為m的y
序列。
輸出檔案:
x和
y序列的最長公共子串行的長度。
輸入樣例:
7
abcbdab
6
bdcaba
輸出樣例:
4
#4.
#include #define n 5010
using namespace std;
char a[n],b[n];
int s[n][n];
int main()
}printf("%d\n",s[n-1][m-1]);
return 0;
}
例3 合唱隊形(noip2004)
n位同學站成一排,**老師要請其中的(n-k)位同學出列,使得剩下的k位同學排成合唱隊形。合唱隊形是指這樣的一種隊形:設k位同學從左到右依次編號為1,2,…,k,他們的身高分別為,,…,,則他們的身高滿足 (1≤i≤k)。
你的任務是,已知所有n位同學的身高,計算最少需要幾位同學出列,可以使得剩下的同學排成合唱隊形。
輸入檔案:
輸入檔案的第一行是乙個整數n(2≤n≤100),表示同學的總數。第一行有n個整數,用空格分隔,第i個整數ti(130≤ti≤230)是第i位同學的身高(厘公尺)。
輸出檔案:
輸出檔案包括一行,這一行只包含乙個整數,就是最少需要幾位同學出列。
輸入樣例:
8
186 186 150 200 160 130 197 220
輸出樣例:
4
資料規模:
對於50%的資料,保證有n≤20;
對於全部的資料,保證有n≤100。
#3.
#include using namespace std;
int main()}}
for(int j=i+1;j<=n;++j)
for(int i=1;ia[j])
}for(int i=1;i<=n;++i)
p[i]=1;
for(int i=2;i<=n;++i)
}printf("%d\n",p[n]);
return 0;
}
例1 求最長不下降子串行。
由n個不相同的整數組成的數列,記為:a(1),a(2),…,a(n)且a(i)≠a(j)(i≠j),例如,3,18,7,14,10,12,23,41,16,24.若存在i1
<i2
3<…e且有a(i1)2)<…e),則稱其為長度為e的不下降子串行。如上例中3,18,23,24就是乙個長度為4的不下降子串行,同時也有3,7,10,12,16,24長度為6的不下降子串行。程式要求,當原數列給出之後,求出最長的不下降子串行的資料個數。
輸入檔案:
第一行為n(1≤n≤5000),第二行為n個整數,之間用空格隔開。
輸出檔案:
最長的不下降子串行的資料個數。
輸入樣例:
10
3 18 7 14 10 12 23 41 16 24
輸出樣例:
6
#1.
#include #define n 5010
using namespace std;
int main()
for(int i=2;i<=n;++i)
}printf("%d\n",f[n]);
return 0;
}
動態規劃 線性DP 1
動態規劃演算法通常用於求解具有某種最優性質的問題。那它和貪心有區別嗎?當然有。不然叫動態規劃幹啥?幼兒園英語老師 dp是啥?小盆友 dog peppa pig 英語老斯 恩恩!真聰明!然而,你是小盆友嗎?如果是 如果不是,dp是d p 的縮寫。意思是動態規劃。聰明的bolt告訴你 是dynamic ...
DP1 動態規劃概述
計數求最大值最小值 求存在性 確定狀態 簡單的說,就是解動態規劃時需要開乙個陣列,陣列的每個元素f i 或者f i j 代表什麼,類似解數學題中,xyz代表什麼一樣,具體分為下面兩個步驟 轉移方程 根據子問題定義直接得到 初始條件和邊界情況 初始條件一般都是a 0 a 1 這種,多看看邊界條件主要是...
動態規劃10 數字DP1
在資訊學競賽中,有這樣一類問題 求給定區間中,滿足給定條件的某個d 進製數或 此類數的數量。所求的限定條件往往與數字有關,例如數字之和 指定數碼個數 數的大小 順序分組等等。題目給定的區間往往很大,無法採用樸素的方法求解。此時,我們就需要利用數字的性質,設計 log n 級別複雜度的演算法。解決這類...