Hdu4055 Number String

Source: Internet
Author: User

Number StringTime Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission (s): 1027 Accepted Submission (s ): 448 Problem DescriptionThe signature of a permutation is a string that is computed as follows: for each pair of consecutive elements of the permutation, write down the letter 'I' (increasing) if the second element is greater than the first one, otherwise wr Ite down the letter 'D' (decreasing ). for example, the signature of the permutation {, 5} is "DIIDID ". your task is as follows: You are given a string describing the signature of Your possible permutations, find out how many permutations satisfy this signature. note: For any positive integer n, a permutation of n elements is a sequence of length n that contains each of the integers 1 thr Ough n exactly once. InputEach test case consists of a string of 1 to 1000 characters long, containing only the letters 'I', 'D' or '? ', Representing a permutation signature. Each test case occupies exactly one single line, without leading or trailing spaces. Proceed to the end of file. '? 'In these strings can be either 'I' or 'D '. outputFor each test case, print the number of permutations satisfying the signature on a single line. in case the result is too large, print the remainder modulo 1000000007. sample InputIIIDDIDD? D ?? Sample output123166hint Permutation {1, 2, 3} has signature "II ". permutations {1, 3, 2} and {2, 3, 1} have signature "ID ". permutations {3, 1, 2} and {2, 1, 3} have signature "DI ". permutation {3, 2, 1} has signature "DD ". "? D "can be either" ID "or" DD "."?? "Gives all possible permutations of length 3. authorHONG, Qize Source2011 Asia Dalian Regional Contest Recommendlcy has obvious dp. We can get the strong state transfer equation, if it is increasing dp [I] [j] = sum (dp [I-1] [1-j-1]), if it is decreasing, we can get dp [I] [j] = sum (dp [I-1] [j-i-1]); so we can get the result right away!

#include <iostream>  #include <stdio.h>  #include <string.h>  #define mod 1000000007  using namespace std;  char str[1050];  int dp[1050][1050],sum[1050][1050];  int main()  {      int i,j;     while(scanf("%s",str)!=EOF)     {         memset(dp,0,sizeof(dp));         sum[1][1]=1;         int strnum=strlen(str);         for(i=2;i<=strnum+1;i++)         {              for(j=1;j<=i;j++)                 {                       if(str[i-2]=='I'||str[i-2]=='?')                     {                               dp[i][j]=(dp[i][j]+sum[i-1][j-1])%mod;                     }                      if(str[i-2]=='D'||str[i-2]=='?')                     {                         dp[i][j]=(dp[i][j]+((sum[i-1][i-1]-sum[i-1][j-1])%mod+mod)%mod)%mod;                       }                     sum[i][j]=(sum[i][j-1]+dp[i][j])%mod;                 }          }          printf("%d\n",sum[strnum+1][strnum+1]);     }      return 0;  }  

 


Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.