zoukankan      html  css  js  c++  java
  • UVA 1650 Number String

    https://vjudge.net/problem/UVA-1650

    题意:D表示比前一个数打,I表示比前一个数小,?表示不确定

    给出一个长为n由D I?组成的字符串,问满足字符串大小要求的n+1的排列的方案数

    SDOI2010地精部落的套路

    http://www.cnblogs.com/TheRoadToTheGold/p/7305170.html

    dp[i][j]前i个数的排列中,第一个为j的方案数

    #include<cstdio>
    #include<cstring>
    #define mod 1000000007
    #define N 1000
    using namespace std;
    char s[N+5];
    int dp[N+5][N+5];
    int main()
    {
        while(scanf("%s",s)!=EOF)
        {
            int len=strlen(s);
            memset(dp,0,sizeof(dp));
            for(int i=0;i<=len;i++) dp[0][i]=1;
            for(int i=1;i<=len;i++)
                for(int j=0;j<=i;j++)
                {
                    if(s[i-1]=='D' || s[i-1]=='?') 
                        for(int k=j;k<i;k++) dp[i][j]+=dp[i-1][k],dp[i][j]%=mod;
                    if(s[i-1]=='I' || s[i-1]=='?')
                        for(int k=0;k<j;k++) dp[i][j]+=dp[i-1][k],dp[i][j]%=mod;
                }
            int ans=0;
            for(int i=0;i<=len;i++) ans+=dp[len][i],ans%=mod;
            printf("%d
    ",ans);
        }
    }
    #include<cstdio>
    #include<cstring>
    #define mod 1000000007
    #define N 1000
    using namespace std;
    char s[N+5];
    int dp[N+5][N+5],sum[N+5][N+5];
    int main()
    {
        while(scanf("%s",s)!=EOF)
        {
            int len=strlen(s);
            memset(dp,0,sizeof(dp));
            memset(sum,0,sizeof(sum));
            for(int i=0;i<=len;i++) dp[0][i]=1,sum[0][i]=i+1;
            for(int i=1;i<=len;i++)
            {
                if(s[i-1]=='D' || s[i-1]=='?') dp[i][0]=sum[i-1][i-1],sum[i][0]=dp[i][0];
                for(int j=1;j<=i;j++)
                    {
                        if(s[i-1]=='D' || s[i-1]=='?') dp[i][j]=(sum[i-1][i-1]-sum[i-1][j-1]+mod)%mod;
                        if(s[i-1]=='I' || s[i-1]=='?') dp[i][j]=(dp[i][j]+sum[i-1][j-1])%mod;
                        sum[i][j]=sum[i][j-1]+dp[i][j],sum[i][j]%=mod;
                    }
            }
            printf("%d
    ",sum[len][len]);
        }
    }
  • 相关阅读:
    poj 2104 C
    2015 百度之星初赛 1 2 2015ACM/ICPC亚洲区上海站 codeforces 851
    3.10补
    3.9补
    3.8补
    3.6补
    3.5补
    3.4补
    3.3补
    2.35补
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/7465734.html
Copyright © 2011-2022 走看看