LeeCode 546 区间 DP

题意

传送门 LeeCode 546 移除盒子

题解

难以顺序处理,故考虑不断拓展区间。令 d p l , r dp_{l, r} dpl,r [ l , r ) [l,r) [l,r) 的答案,当 b l b_{l} bl b r − 1 b_{r-1} br1 不在同一轮被移除,则可以枚举分界点更新答案;反之,则难以直接递推。令 f l , r , k f_{l,r,k} fl,r,k [ l , r ) [l, r) [l,r) 中与 b l b_{l} bl 在同一轮被移除的元素数量即可。总时间复杂度 O ( n 4 ) O(n^4) O(n4)

#include <bits/stdc++.h>
using namespace std;

constexpr int N = 100;
class Solution {
   
   public:
    int f[N][N + 1][N + 1], dp[N][N + 1];
    int removeBoxes(vector<int>& boxes) {
   
        int n = boxes.size();
        const int inf = 1e9;
        for (int i = 0; i < n; ++i) {
   
            for (int j = 0; j <= n; ++j) {
   
                dp[i][j] = -inf;
                for (int k = 0; k <= n; ++k) {
   
                    f[i][j][k] = -inf;
                }
            }
        }
        for (int i = 0; i < n; ++i) {
   
            f[i][i + 1][1] = 0;
            dp[i][i + 1] = 1;
        }
        auto get_max = [&](int& x, int y) {
   
            x = max(x, y);
        };
        for (int w = 2; w <= n; ++w) {
   
            for (int l = 0; l + w <= n; ++l) {
   
                int r = l + w;
                for (int k = 1; k <= r - l; ++k) {
   
                    if (boxes[l] == boxes[r - 1]) {
   
                        get_max(f[l][r][k], f[l][r - 1][k - 1]);
                    }
                    for (int m = l + 1; m < r; ++m) {
   
                        get_max(f[l][r][k], f[l][m][k] + dp[m][r]);
                    }
                    get_max(dp[l][r], f[l][r][k] + k * k);
                }
            }
        }
        return dp[0][n];
    }
};

相关推荐

  1. LeeCode 546 区间 DP

    2024-02-17 04:16:01       28 阅读
  2. LeetCode 56 合并区间

    2024-02-17 04:16:01       31 阅读
  3. LeetCode56.合并区间

    2024-02-17 04:16:01       27 阅读
  4. Leetcode56_合并区间

    2024-02-17 04:16:01       14 阅读
  5. leetcode56--合并区间

    2024-02-17 04:16:01       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-17 04:16:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-17 04:16:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-17 04:16:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-17 04:16:01       20 阅读

热门阅读

  1. 蓝桥杯刷题--python-6

    2024-02-17 04:16:01       34 阅读
  2. 2024/02/15

    2024-02-17 04:16:01       26 阅读
  3. Python OpenCV 牛刀小试(练习)

    2024-02-17 04:16:01       30 阅读
  4. 英伟达(NVIDIA)和CUDA

    2024-02-17 04:16:01       34 阅读
  5. 洛谷C++简单题小练习day13—文字处理软件

    2024-02-17 04:16:01       25 阅读
  6. react中render阶段做了什么

    2024-02-17 04:16:01       34 阅读
  7. 作业2.15

    2024-02-17 04:16:01       26 阅读
  8. 开源软件的影响力

    2024-02-17 04:16:01       22 阅读