zoukankan      html  css  js  c++  java
  • HDU 4055

    大意:给出一个排列的上升下降的情况,求满足条件的序列数。

    例如:321 对应着 DD, ID对应着: 231、132。

    DP问题,分析待整理,本题个人觉得挺经典的。

     1 /*
     2 ID:esxgx1
     3 LANG:C++
     4 PROG:hdu4055
     5 */
     6 #include <cstdio>
     7 #include <cstring>
     8 #include <iostream>
     9 #include <algorithm>
    10 using namespace std;
    11 
    12 int dp[1024][1024];
    13 
    14 #define MOD    1000000007
    15 
    16 int main(void)
    17 {
    18     #ifndef ONLINE_JUDGE
    19     freopen("in.txt", "r", stdin);
    20     #endif
    21 
    22     char s[1024];
    23     while(scanf("%s", s) > 0) {
    24         int len = strlen(s);
    25         dp[0][0] = 1;
    26         for(int i = 0 ; i < len; ++i) {
    27             int i2 = i + 1;
    28             if (s[i] == 'D') {
    29                     dp[i2][i2] = 0;
    30                     for(int j = i2; j--; )
    31                         dp[i2][j] = (dp[i2][j+1] + dp[i2-1][j]) % MOD;
    32             } else if (s[i] == 'I') {
    33                     dp[i2][0] = 0;
    34                     for(int j=1; j<=i2; ++j)
    35                         dp[i2][j] = (dp[i2][j-1] + dp[i2-1][j-1]) % MOD;
    36             } else {
    37                     int sum = 0;
    38                     for(int k =0 ; k<i2; ++k) sum = (sum + dp[i2-1][k]) % MOD;
    39                     for(int j=0; j<=i2; ++j)
    40                         dp[i2][j] = sum;
    41             }
    42         }
    43         int sum = 0;
    44         for(int i=0; i<=len; ++i) sum = (sum + dp[len][i]) % MOD;
    45         printf("%d
    ", sum);
    46     }
    47     return 0;
    48 }
    2014-07-29 16:56:00 Accepted 4055 1437MS 4312K 975 B G++
  • 相关阅读:
    gitlab web端使用
    1、gitlab的理论知识
    git命令
    gitlab web客户端的使用
    jenkins
    jenkins pipeline
    nginx
    ELK(+Redis)-开源实时日志分析平台
    OpenStack构架知识梳理
    Linux 下的dd命令使用详解
  • 原文地址:https://www.cnblogs.com/e0e1e/p/hdu_4055.html
Copyright © 2011-2022 走看看