zoukankan      html  css  js  c++  java
  • leetcode903 Valid Permutations for DI Sequence

    思路:

    dp[i][j]表示到第i + 1个位置为止,并且以剩下的所有数字中第j + 1小的数字为结尾所有的合法序列数。

    实现:

     1 class Solution
     2 {
     3 public:
     4     int numPermsDISequence(string S)
     5     {
     6         if (S.empty()) return 0;
     7         int n = S.length(), MOD = 1e9 + 7;
     8         vector<vector<int>> dp(2, vector<int>(n + 1, 0));
     9         for (int i = 0; i <= n; i++) dp[0][i] = 1;
    10         for (int i = 1; i <= n; i++)
    11         {
    12             if (S[i - 1] == 'D')
    13             {
    14                 dp[i & 1][n - i] = dp[i - 1 & 1][n - i + 1];
    15                 for (int j = n - i - 1; j >= 0; j--)
    16                     dp[i & 1][j] = (dp[i & 1][j + 1] + dp[i - 1 & 1][j + 1]) % MOD;
    17             }
    18             else
    19             {
    20                 dp[i & 1][0] = dp[i - 1 & 1][0];
    21                 for (int j = 1; j <= n - i; j++)
    22                     dp[i & 1][j] = (dp[i - 1 & 1][j] + dp[i & 1][j - 1]) % MOD;
    23             }
    24         }
    25         return dp[n & 1][0];
    26     }
    27 }
  • 相关阅读:
    Title
    Title
    Title
    Title
    Python生成随机验证码
    Time模块和datetime模块
    For循环的实质
    Python函数
    集合set
    字符串内置方法的使用
  • 原文地址:https://www.cnblogs.com/wangyiming/p/11573330.html
Copyright © 2011-2022 走看看