hdu 1159 公共子串行

2021-08-27 10:12:40 字數 593 閱讀 1980

用二維陣列f[i][j]記錄字串s1的前i個字元與s2的前j個字元的最大公共子串。當s1[i]==s2[j]時,f[i][j]=f[i-1][j-1]+1;否則f[i][j]=max(f[i-1][j],f[i][j-1]);

#include#include#define max(a,b) a>b?a:b

#define n 1000

int f[n][n];

char s1[n],s2[n];

int main()

} printf("%d\n",f[len1][len2]);

} return 0;

}

@@@剛開始把陣列t寫進了main函式內部,結果總是提醒runtimeerror(stack_overflow),將陣列f寫在函式外問題就沒有了,這是為什麼呢?

這個問題涉及到了全域性變數和區域性變數的區別。c語言中資料儲存分為動態儲存區和靜態儲存區,全域性變數儲存在靜態儲存區,生命週期是程式執行的整個過程。區域性變數儲存在動態儲存區,生命週期是它所在函式執行的過程,動態儲存區使用來管理,可申請空間較小,容易出現上述的「爆棧」現象。

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題裡有點找到感覺了,如果想要...

hdu1159 最長公共子串行經典題 LCS

解題思路 狀態 dp i j 子列c1i和子列c2j的lcs 轉移方程 dp i j dp i 1 j 1 1,c1i c2j max dp i 1 j dp i j 1 c1i c2j 當兩子串行的最後乙個字元相同時,把兩子串行的尾部去掉 因為相同,被記錄 此時的lcs 1 當不相同時,就是找當前...