類似於字典序比較的最長公共子串行,
只要找到狀態方程就比較好搞,
從角標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...