1.石子歸併問題
dp[i][j]表示區間i到j合併所需的最小花費。
先求出小區間的最小花費,再轉移到大的區間。
轉移方程:dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j])
初始狀態:dp[i][i]=0
模板:
for(int i=1;i<=n;i++)cin>>a[i],sum[i]=sum[i-1]+a[i]for(int l=2;l<=n;l++)
}
2.括號匹配問題
求最大括號匹配數
dp[i][j]表示i到j區間的最大括號匹配數
先求出小區間的最大括號匹配數,再轉移到大區間。
狀態轉移:
dp[i][j]=dp[i+1][j-1]+2(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']')
dp[i][j]=max(dp[i][k]+dp[k+1][j],dp[i][j])(i<=k初始狀態:dp[i][j]=0
模板:
for(int len=2;len<=s.size();len++)}}
記錄路徑,括號補全
用pos[i][j]記錄i到j這段區間從哪個位置斷開所要消耗的括號最少,然後從斷點分開,遞迴輸出答案。
模板:
void dfs(int l,intr)
else
else
}}for(int l=2;l<=len;l++)}}
}dfs(
0,len-1);
參考部落格:
區間dp筆記
區間dp是一類在區間上進行dp的最優問題,一般是根據問題設出乙個表示狀態的dp,可以是二維的也可以是三維的,一般情況下為二維。然後將問題劃分成兩個子問題,也就是一段區間分成左右兩個區間,然後將左右兩個區間合併到整個區間,或者說區域性最優解合併為全域性最優解,然後得解。區間dp就是f i j 表示i到...
區間dp學習筆記
定義 區間動態規劃問題一般都是考慮,對於每段區間,他們的最優值都是由幾段更小區間的最優值得到,是分治思想的一種應用,將乙個區間問題不斷劃分為更小的區間直至乙個元素組成的區間,列舉他們的組合 求合併後的最優值。設f i,j 1 i j n 表示區間 i,j 內的數字相加的最小代價最小區間f i,i 0...
區間dp學習筆記
怎麼辦,膜你賽要掛慘了,下午我還在學區間 dp 不管怎麼樣,計畫不能打亂 4 不 4 為啥我一開始就先弄模板呢?因為這東西看模板就能看懂。for int i 2 i len i 列舉區間長度 for int l 1,r l len 1 r n l r 列舉左端點和右端點 以下你可以搞一下事情 for...