zoukankan      html  css  js  c++  java
  • dp高难本攻略

    903. DI 序列的有效排列

          public int numPermsDISequence(String S) {
            int n=S.length();
            int [][]dp=new int [n+1][n+1];
            dp[0][0]=1;
            int M=(int) (Math.pow(10, 9)+7);
            //dp[i][j]i表示取到s的下标,j表示结尾取的数值
            for(int i=0;i<n;i++){
                if(S.charAt(i)=='I'){
                    for(int j=1;j<=i+1;j++)
                        dp[i+1][j]=(dp[i+1][j-1]+dp[i][j-1])%M;
                }else{
                    for(int j=i;j>=0;j--)
                        dp[i+1][j]=(dp[i+1][j+1]+dp[i][j])%M;
                }
            }
            int res=0;
            for(int i=0;i<=n;i++)
                res=(res+dp[n][i])%M;
            return res;
        }

     

    32. 最长有效括号

       public int longestValidParentheses(String s) {
        if (s.length() < 2)
            return 0;
        int[] dp = new int[s.length()];
        int res = 0;
        for (int i = 1; i < s.length(); i++) {
            if (s.charAt(i) == ')') {
                if (s.charAt(i-1) == '(')
                    dp[i] = 2 + (i - 2 >= 0 ? dp[i-2] : 0);
                else if (i - 1 - dp[i-1] >= 0 && s.charAt(i - 1 - dp[i-1]) == '(')
                    dp[i] = 2 + dp[i-1] + (i - 2 - dp[i-1] >= 0 ? dp[i-2-dp[i-1]] : 0);
                res = Math.max(res, dp[i]);
            }
        }
        return res;
    }

     

  • 相关阅读:
    BigPipe
    HDFS Scribe Integration 【转】
    C++ | class size
    Leetcode | Container With Most Water
    Leetcode | Sqrt(x)
    Network | sk_buff
    JVM, JRE 和JDK
    facebook面试题【转】
    ML | SVM
    ML| EM
  • 原文地址:https://www.cnblogs.com/yuelien/p/10509389.html
Copyright © 2011-2022 走看看