DP寫(xiě)程序的循環(huán)怎么開(kāi)始:
看初始狀態(tài)是是什么,再看狀態(tài)轉(zhuǎn)移方程是什么依賴順序
比如LC375 初始狀態(tài) dp[i][i] = 0 轉(zhuǎn)移方程dp[i][j] = min (i<=k<=j) { k + max(dp[i][k-1], dp[k+1][j]) }
那么明顯是由初始狀態(tài)看是從某一點(diǎn)向外擴(kuò)展,由轉(zhuǎn)移方程看是從低到高,所以循環(huán)為:
for (int i = 1; l < n; l++)
for (int i= 1;i <= n-l; i++) {
int j = i+l;
dp[i][j] = Integer.MAX_VALUE;
for (int k = i; k <= j; k++)
dp[i][j] = Math.min(dp[i][j], k + Math.max(dp[i][k - 1], dp[k + 1][j]));
}
return dp[1][n];
}
先(1,2)(2,3)。。。。(n,n+1) 再(1,3)(2,4)。。。。這樣拓展