1547. 切棍子的最小成本

  1. 题目链接

  2. 解题思路

    • 这个题和戳气球有相同的思想,戳气球是以「最后戳哪个气球」组织答案,这个题是,「先切哪个」组织答案
    • 戳气球
  3. 代码

    class Solution {
    public:
    // [L, R]上,怎么切?
    int process(vector<int> &cuts, int L, int R, vector<vector<int>> &dp) {
    if (L > R) {
    return 0;
    }
    if(L == R) {
    return cuts[R + 1] - cuts[L - 1];
    }
    if (dp[L][R] != -1) {
    return dp[L][R];
    }
    // 先切谁?
    int ans = INT32_MAX;
    for (int i = L; i <= R; ++i) {
    int next = process(cuts, L, i - 1, dp) + process(cuts, i + 1, R, dp) + cuts[R + 1] - cuts[L - 1];
    ans = min(ans, next);
    }
    dp[L][R] = ans;
    return ans;
    }
    int minCost(int n, vector<int>& cuts) {
    int m = cuts.size();
    sort(cuts.begin(), cuts.end());
    vector<int> newCuts(m + 2, 0);
    for (int i = 1; i <= m; ++i) {
    newCuts[i] = cuts[i - 1];
    }
    newCuts[m + 1] = n;
    vector<vector<int>> dp(m + 2, vector<int>(m + 2, -1));
    return process(newCuts, 1, m, dp);
    }
    };
posted @   ouyangxx  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示