1547. 切棍子的最小成本
题目链接:1547. 切棍子的最小成本
代码如下:
//参考链接:https://leetcode.cn/problems/minimum-cost-to-cut-a-stick/solutions/2982639/jiao-ni-yi-bu-bu-si-kao-qu-jian-dpcong-j-f8px
class Solution
{
public:
int minCost(int n, vector<int>& cuts)
{
cuts.push_back(0);
cuts.push_back(n);
sort(cuts.begin(), cuts.end());
vector<vector<int>> memo(cuts.size(), vector<int>(cuts.size()));
auto dfs = [&](auto&& dfs, int i, int j)->int
{
if (i + 1 == j)//无需切割
{
return 0;
}
int& res = memo[i][j];
if (res)
{
return res;
}
res = INT_MAX;
for (int k = i + 1; k < j; k++)
{
res = min(res, dfs(dfs, i, k) + dfs(dfs, k, j));
}
res += cuts[j] - cuts[i];
return res;
};
return dfs(dfs, 0, cuts.size() - 1);
}
};