區間dp,顧名思義,求區間最值問題。通過合併小區間最優解來更新大區間,然後逐漸更新出答案。
要求解在乙個區間上的最優解,那麼就要把這個區間分割成乙個個小區間,求解每個小區間的最優解,再合併小區間得到大區間。所以在**實現上,先列舉區間長度len為每次分割成的小區間長度(由短到長不斷合併),內層列舉該長度下的起點和終點,然後在這個起點與終點之間列舉分割點,求解這段小區間在某個分割點下的最優解。
總結:先列舉區間長度,再列舉左端點,最後列舉區間端點進行狀態轉移。
for(int len=2;len<=n;len++)
for(int len=2;len<=n;len++)
for(int i=1;i思路:在查詢最優分割點的時候,我們浪費了大量時間。那麼我們可以把最優分割點儲存下來,在查詢的時候利用儲存的最優分割點來優化查詢過程。
四邊形不等式優化:
(1)功能:用來尋找,s[i][j] (i~j的最優分割點)與其他分割點的關係。
(2)不等式內容:如果某東西滿足a(3)結論關係:s[i][j-1]<=s[i][j]<=s[i+1][j]
【**】(以石子歸併2為例,只對最小值有效)
#includeusing namespace std;
const int inf=0x3f3f3f3f;
int main()
for(int i=1;i<=n;i++)
for(int len=1;len<=n;len++)}}
}int ans=inf;
for(int i=1;i<=n;i++)
ans=min(ans,dp[i][i+n-1]);
printf("%d\n",ans);
return 0;
}
dp四邊形優化
如果dp i j min dp i k dp k 1 j w i j 且滿足dp a c dp b d dp a d dp c d a那麼dp具有四邊形不等式性質 另外如果可以證明w i j 滿足單調性和四邊形不等式性質,那麼dp也具有四邊形不等式性質 單調性 w i j w i j 1 w i 1...
四邊形優化dp小結
在本蒟蒻開始亂扯之前,先推薦兩篇部落格,有更詳細清晰的講解,這兒就不說那麼多了,畢竟叫 小結 對吧。下面進入正題 一下所有的把min取成max,把 取成 也成立 對於乙個狀態轉移方程dp i j min 1.當函式w i,j 滿足 w a,c w b,d w b,c w a,d 且a b c d 時...
DP的四邊形優化
1 狀態轉移方程如下 m i,j 表示對應i,j情況下的最優值。w i,j 表示從i到j的代價。例如在合併石子中 m i,j 表示從第i堆石子合併到j堆石子合併成一堆的最小代價。w i,j 表示從第i堆石子到第j堆石子的重量和。2 函式w滿足區間包含的單調性和四邊形不等式 1 假如函式w滿足上述條件...