zoukankan      html  css  js  c++  java
  • 剑指 Offer II 094. 最少回文分割

    先用区间dp求出每个i,j是否为回文串

    然后找出最小的分割次数即可

    一个好的做法:

    对于求任意区间[i, j]的问题,可以先遍历区间长度,从1开始,一直到n,每次找出dp[i, j]  dp[i + 1, j - 1]之间的关系,这样也能遍历所有的区间,

    并求出想要的答案

    class Solution {
    public:
        int vis[2010][2010];
        int ans[2010][2010];
    
    
        int cut(int j, string s)
        {
            if(vis[0][j])
            {
                ans[0][j] = 0;
                return 0;
            }
            if(ans[0][j] != -1) return ans[0][j];
            int cnt = 9999;
            for(int i = 1; i <= j; i++)
            {
                if(vis[i][j])
                {
                    cnt = min(cnt, cut(i - 1, s) + 1);
                }
            }
            ans[0][j] = cnt;
            return cnt;
    
        }
    
    
        int minCut(string s) {
    
            memset(vis, -1, sizeof(vis));
            memset(ans, -1, sizeof(ans));
            int len = s.length();
            for(int i = 0; i < len; i++)
                vis[i][i] = 1;
            for(int k = 2; k <= len; k++)
            {
                for(int i = 0; i + k <= len; i++)
                {
                    int j = i + k - 1;
                    if(k == 2)
                        vis[i][j] = (s[i] == s[j]);
                    else
                        vis[i][j] = (s[i] == s[j]) && vis[i + 1][j - 1];
                }
            }
            return cut(len - 1, s);
    
        }
    };
    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    Codeforces Round #251 (Div. 2) A
    topcoder SRM 623 DIV2 CatAndRat
    topcoder SRM 623 DIV2 CatchTheBeatEasy
    topcoder SRM 622 DIV2 FibonacciDiv2
    topcoder SRM 622 DIV2 BoxesDiv2
    Leetcode Linked List Cycle II
    leetcode Linked List Cycle
    Leetcode Search Insert Position
    关于vim插件
    Codeforces Round #248 (Div. 2) B. Kuriyama Mirai's Stones
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/15784937.html
Copyright © 2011-2022 走看看