HDU 1159 DP之最長公共子串行

2021-07-09 20:10:34 字數 712 閱讀 7792

類似於字典序比較的最長公共子串行,

只要找到狀態方程就比較好搞,

從角標1開始計算不會出錯,從0還是報錯了;

切防止對比溢位要在本來的基礎上+1計算;

言歸正傳:

dp型別都是狀態方程很重要;

假設兩個作對比,分別是s1,s2,則一定有 則dp[i][j] 就為s1前 i 個和s2前 j 個的公共子串行;

動態方程就是

if(s1[i]==s2[j])

else

else dp[i][j]=dp[i-1][j];

}

ac**就是:

#include #include #include using namespace std ;

const int maxi = 1000;

int ma[maxi][maxi];

char s1[maxi],s2[maxi];

int main()

else

else ma[i][j]=ma[i-1][j];}}

} cout<



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數塔變形

在一條x軸上,每個點在每個時刻都會有一定數量的餅,問在規定時間內,可以可以最多得到多少餅 就是把矩陣轉化為數塔,在每個時刻的某個位置都有三種可以到達當前位置的可能性 即 左邊,不動,右邊 dp i j 表示第i秒第j位置有多少個餡餅 狀態轉移方程為 dp i j maxi dp i 1 j 1 dp...