Leetcode: 664. Strange Printer

来源:互联网 发布:装饰行业网络销售 编辑:程序博客网 时间:2024/05/29 17:57

题目描述

This problem is simiiar to #546(Leetcode) Remove Boxes which uses f[l][r][k] to store the maximum points of range [l, r] with k boxes equal to r. But for this problem, we can use 2D-array DP instead of 3D-array DP because the store of k is useless.

f[i][j] represents the minumum turns to print the sequence from i to j. The transition function should be:

f[i][j] = min(f[i][k] + f[k+1][j-1]) for each k where i

 #include <string>#include <cmath>class Solution{private:    int f[100][100];private:    int dfs(const std::string& s, int l, int r)    {        if (l > r) return 0;        if (f[l][r]) return f[l][r];        f[l][r] = dfs(s, l, r - 1) + 1;        for (int i = l; i < r; ++i)        {            if (s[i] == s[r])            {                f[l][r] = std::min(f[l][r], dfs(s, l, i) + dfs(s, i + 1, r - 1));            }        }        return f[l][r];    }public:    int strangePrinter(std::string s)    {        memset(f, 0, sizeof(f));        int len = (int)s.size();        return dfs(s, 0, len - 1);    }};
原创粉丝点击