發現動態規劃,記憶化搜尋,bfs之類的尋找最優解的演算法,往往會有一些尋找最優解過程中的記錄。通過觀察這些記錄,我們能尋到一些蛛絲馬跡,從而找到最優解是如何一步一步形成的。因此可以列印決策過程,或者說可以還原我們是如何一步一步找到答案的,比如列印最短路徑,又或者如此題中列印解。
以前bfs還能列印路徑就覺得很神奇了。
今天碰到區間dp,用遞迴的方法還原路徑,學到了。
關於記憶化搜尋與動態規劃的關係,9,10,11樓說的話:
#include#define maxn 110
#define inf 0x3f3f3f3f
using namespace std;
char str[maxn];
int dp[maxn][maxn];
int len;
void print(int l,int r)
if(((str[l]=='('&&str[r]==')')||(str[l]=='['&&str[r]==']'))&&dp[l][r]==dp[l+1][r-1])
for(int k=l;k
uva1626 括號序列(區間DP)
題意 給出t個字串,僅由 四種 字元組成,其中 為合法,均為合法,而 則為不合法狀態。求最少新增多少個字元,使得字串合法,輸出合法的其中一種方案。原始字串字元不多於100個 第一行為字串數量。樣例輸入 1 樣例輸出 思路 1.前後配對的為dp i j min dp i j dp i 1 j 1 2....
UVA 1626括號序列DP
題目背景 我們將正規括號序列定義如下 空序列是正規括號序列。如果s是乙個正規括號序列,那麼 s 和 s 都是正規括號序列。如果a和b都是正規括號序列,那麼ab是乙個正規括號序列。例如,下面這些序列都是正規括號序列 而下面這些不是正規括號序列 題目描述 給你一些含有字元 和 的括號序列。你需要找乙個最...
uva 1626 括號序列
這道題目是劉汝佳演算法入門中的一道動態規劃題目。要求新增最少括號得到乙個規則序列。先來看看它的狀態轉移,稍有複雜。邊界條件就是s為空是d s 為0,s位單字元時d s 1。另外需要注意的就是不管s是否進行第一種轉移,都要嘗試第二種轉移。include include include include ...