zoukankan      html  css  js  c++  java
  • 546 Remove Boxes 移除盒子

    给定一些不同颜色的盒子,以不同的正整数表示。
    消去连续相同颜色的盒子,直到全部消除完毕为止。每一次消去可以得到k * k分(k为消去盒子的个数, k  >= 1)。
    计算可以得到的最大得分。
    注意:盒子的数量n不超过100。

    详见:https://leetcode.com/problems/remove-boxes/description/

    C++:

    class Solution {
    public:
        int removeBoxes(vector<int>& boxes) 
        {
            int n = boxes.size();
            int dp[100][100][100] = {0};
            return helper(boxes, 0, n - 1, 0, dp);
        }
        int helper(vector<int>& boxes, int i, int j, int k, int dp[100][100][100]) 
        {
            if (j < i)
            {
                return 0;
            }
            if (dp[i][j][k] > 0)
            {
                return dp[i][j][k];
            }
            int res = (1 + k) * (1 + k) + helper(boxes, i + 1, j, 0, dp);
            for (int m = i + 1; m <= j; ++m) 
            {
                if (boxes[m] == boxes[i]) 
                {
                    res = max(res, helper(boxes, i + 1, m - 1, 0, dp) + helper(boxes, m, j, k + 1, dp));
                }
            }
            return dp[i][j][k] = res;
        }
    };
    

     参考:http://www.cnblogs.com/grandyang/p/6850657.html

  • 相关阅读:
    记忆力训练今天早上有了点小进步
    刻意练习
    12.12周计划
    12.6周总结
    The Power of Reading Insights
    Storytelling with Data
    nexus私服和快照正式版本etc
    springboot启动流程分析
    容器启动getBean的流程分析
    canal简介
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8921858.html
Copyright © 2011-2022 走看看