PAT A1045 動態規劃

2021-09-12 17:06:24 字數 884 閱讀 1946

該題目有兩種解法,都是動態規劃中特別經典的解法,一種是最長不下降子串行,一種是最長公共子串行;

第一種方法對於該題目其實有點取巧的感覺;

首先,注意一點,對於最長不下降子串行來說,其序列的元素一定是非遞減的,所以我們的當務之急是如何將值轉換為

遞增序列,從而使得演算法能夠繼續進行;

對於這個問題,我們可以使用hashtable進行處理,也就是利用hashtable重新使得值遞增;

這裡需要注意一下,子串行遞增研究的是不連續的子串行,連續的子串行其實可以用前面的kmp演算法來及進行解決;

對於該問題,首當其中的還是狀態轉移方程。由於該問題還是從0開始研究,所以仍然設定乙個一維陣列dp來儲存中間的狀態;

大致思路是限定乙個子串序列,然後選擇乙個,從第乙個開始進行輪詢,這裡有點像插入排序的感覺;

其狀態轉移方程為dp[i]=max(1,dp[j]+1);

該方程可以理解將第i個元素排在j後面,從而繼承j之前的子串序列的長度,1為單個元素的序列長度;

**如下:

#include#include#include#includeusing namespace std;

const int maxc=210;

const int maxn=10010;

int hashtable[maxc];

int a[maxn],dp[maxn];

int main()

}int ans=-1;

for(int i=0;i第二種不太好理解,所以這裡先不再贅述,主要是不能理解為什麼公共部分可以重複輸出;

PAT A1045 動態規劃

該題目有兩種解法,都是動態規劃中特別經典的解法,一種是最長不下降子串行,一種是最長公共子串行 第一種方法對於該題目其實有點取巧的感覺 首先,注意一點,對於最長不下降子串行來說,其序列的元素一定是非遞減的,所以我們的當務之急是如何將值轉換為 遞增序列,從而使得演算法能夠繼續進行 對於這個問題,我們可以...

PAT A1045 動態規劃

該題目有兩種解法,都是動態規劃中特別經典的解法,一種是最長不下降子串行,一種是最長公共子串行 第一種方法對於該題目其實有點取巧的感覺 首先,注意一點,對於最長不下降子串行來說,其序列的元素一定是非遞減的,所以我們的當務之急是如何將值轉換為 遞增序列,從而使得演算法能夠繼續進行 對於這個問題,我們可以...

PAT A1045 動態規劃

該題目有兩種解法,都是動態規劃中特別經典的解法,一種是最長不下降子串行,一種是最長公共子串行 第一種方法對於該題目其實有點取巧的感覺 首先,注意一點,對於最長不下降子串行來說,其序列的元素一定是非遞減的,所以我們的當務之急是如何將值轉換為 遞增序列,從而使得演算法能夠繼續進行 對於這個問題,我們可以...