一.什麼是區間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 }