區間dp

一.什麼是區間dp?算法

顧名思義:區間dp就是在區間上進行動態規劃,求解一段區間上的最優解。主要是經過合併小區間的 最優解進而得出整個大區間上最優解的dp算法。spa

二.核心思路code

既然讓我求解在一個區間上的最優解,那麼我把這個區間分割成一個個小區間,求解每一個小區間的最優解,再合併小區間獲得大區間便可。因此在代碼實現上,我能夠枚舉區間長度len爲每次分割成的小區間長度(由短到長不斷合併),內層枚舉該長度下能夠的起點,天然終點也就明瞭了。而後在這個起點終點之間枚舉分割點,求解這段小區間在某個分割點下的最優解。
板子:blog

1 for(int len = 1;len<=n;len++){//枚舉長度
2         for(int j = 1;j+len<=n+1;j++){//枚舉起點,ends<=n
3             int ends = j+len - 1;
4             for(int i = j;i<ends;i++){//枚舉分割點,更新小區間最優解
5                 dp[j][ends] = min(dp[j][ends],dp[j][i]+dp[i+1][ends]+something);
6             }
7         }
8     }
相關文章
相關標籤/搜索