第十周 Leetcode 546. Remove Boxes (HARD) 记忆化搜索

Posted 逐雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十周 Leetcode 546. Remove Boxes (HARD) 记忆化搜索相关的知识,希望对你有一定的参考价值。

Leetcode546

给定一个整数序列,每次删除其中连续相等的子序列,得分为序列长度的平方 求最高得分。

dp方程如下:

  memo[l][r][k] = max(memo[l][r][k], dfs(boxes,memo,l,i,k+1) + dfs(boxes,memo,i+1,r-1,0));

意思是在序列的l-r部分后接k长度的 r值序列 所能得到的最大得分。

代码很简单

class Solution {
public:
    int removeBoxes(vector<int>& boxes) {
        int n=boxes.size();
        int memo[100][100][100] = {0};
        return dfs(boxes,memo,0,n-1,0);
    }
    
    int dfs(vector<int>& boxes,int memo[100][100][100], int l,int r,int k){
        if (l>r) return 0;
        if (memo[l][r][k]!=0) return memo[l][r][k];

        while (r>l && boxes[r]==boxes[r-1]) {r--;k++;}
        memo[l][r][k] = dfs(boxes,memo,l,r-1,0) + (k+1)*(k+1);
        for (int i=l; i<r; i++){
            if (boxes[i]==boxes[r]){
                memo[l][r][k] = max(memo[l][r][k], dfs(boxes,memo,l,i,k+1) + dfs(boxes,memo,i+1,r-1,0));
            }
        }
        return memo[l][r][k];
    }
};

  

以上是关于第十周 Leetcode 546. Remove Boxes (HARD) 记忆化搜索的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 546. Remove Boxes

第十周课下补做

20165332第十周课下作业

第十周课下作业

20165231 第十周课下补做

第十周课堂测试补做