简单的DP, 处理的时候尽量用len从1到n) , i 从 1 到 len-n] 来遍历.
注意这个时候 len 表示的是从i开头之后接连len个元素组成的序列
for (int i = n-1; i >=1 ; --i){ for (int j = i+1; j <= n ; ++j){ dp[i][j] = INF; for (int k = i; k < j ; ++k){ dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + weight(i,j) ); } } }
注意先初始化dp[i][j]为INF
k从 i 到 j 插入
把i.j分成 [i,k] 和 [k+1,j] (松弛处理) 两段 两段的代价就是总体重量
最后dp[1][n]即是答案.
时间: 2024-10-11 23:09:09