题意
题解
d
p
[
i
]
[
j
]
dp[i][j]
dp[i][j] 代表切割位置
i
i
i 与切割位置
j
j
j 间切木棍的最小成本,则有递推式
d
p
[
i
]
[
j
]
=
m
i
n
i
<
k
<
j
{
d
p
[
i
]
[
k
]
+
d
p
[
k
]
[
j
]
+
c
u
t
s
[
j
]
−
c
u
t
s
[
i
]
}
dp[i][j]=min_{i<k<j}\{dp[i][k]+dp[k][j]+cuts[j]-cuts[i]\}
dp[i][j]=mini<k<j{dp[i][k]+dp[k][j]+cuts[j]−cuts[i]}
class Solution
{
#define maxm 105
public:
int cut[maxm], dp[maxm][maxm];
int minCost(int n, vector<int> &cuts)
{
int m = cuts.size();
sort(cuts.begin(), cuts.end());
for (int i = 0; i < m; i++)
{
cut[i + 1] = cuts[i];
}
cut[0] = 0, cut[m + 1] = n;
for (int w = 2; w <= m + 1; w++)
{
for (int i = 0; i + w <= m + 1; i++)
{
int j = i + w, res = INT_MAX;
for (int k = i + 1; k < j; k++)
{
res = min(res, dp[i][k] + dp[k][j] + cut[j] - cut[i]);
}
dp[i][j] = res;
}
}
return dp[0][m + 1];
}
};