鬱悶啊,今天做中南的比賽突然發現這樣的題,居然忘記怎麼做了
在此做下解題報告記錄下,以此為鑑
sample input
abcfbcabfcab
programming contest
abcd mnp
sample output 42
0題目意思就不解釋了
演算法當然是dp啊
狀態轉移方程式:
f(i,j)=f(i-1,j-1)(a[i]==b[j])
f(i,j)=max(f(i-1,j),f(i,j-1))(a[i]!=b[j])
講解的地方就直接複製貼上了= =
**如下:
#include #include #include #include int f[1005][1005];
int max(int a,int b)
int main()
{ char a[1005],b[1005];
int i,j,k,lenx,leny;
while(scanf("%s%s",a,b)!=eof)
{lenx=strlen(a);
leny=strlen(b);
for(i=0;i
hdu 1159 最長公共子串行
2562465 2010 06 29 17 20 23 accepted 1159 31ms 3240k 835 b c t t include include include define max size 10000 using namespace std int dp max size 1 m...
HDU1159最長公共子串行
這個題貌似是演算法導論的原題 不過本著能迴圈堅決不用遞迴的態度 我認真地寫了迴圈 關鍵其實就是乙個轉移方程 如果兩個位元組一樣,他就等於 dp a b dp a 1 b 1 1 如果不一樣就找兩邊最大的 dp a b max dp a b 1 dp a 1 b 另外在dp題裡有點找到感覺了,如果想要...
HDU 1159 DP之最長公共子串行
類似於字典序比較的最長公共子串行,只要找到狀態方程就比較好搞,從角標1開始計算不會出錯,從0還是報錯了 切防止對比溢位要在本來的基礎上 1計算 言歸正傳 dp型別都是狀態方程很重要 假設兩個作對比,分別是s1,s2,則一定有 則dp i j 就為s1前 i 個和s2前 j 個的公共子串行 動態方程就...