zoukankan      html  css  js  c++  java
  • 【POJ 1850】 Code

    【POJ 1850】 Code


    还是非常想说 

    数位dp真的非常方便!

    !。

    数位dp真的非常方便!。!


    数位dp真的非常方便!

    !!



    重要的事说三遍


    该题转换规则跟进制差点儿相同 到z时进一位 如az下位为bc 上位必须比下位小

    依据这个规则搜出全部情况就可以


    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    
    int dp[11][27];
    int digit[11];
    
    /*
    1~26表示加的字母 0表示不加
    有前导时 枚举pre+1 ~ 26-pos
    没有的话枚举 0 ~ 26-pos
    */
    
    int dfs(int pos,int pre,bool high)
    {
        if(pos == -1) return pre > 0;
       if(!high && ~dp[pos][pre]) return dp[pos][pre];
    
        int i,en,ans = 0,st;
        en = high? digit[pos]: 26-pos;
        st = pre? pre+1: 0;
    
        for(i = st; i <= en; ++i) ans += dfs(pos-1,i,high && i == en);
    
        if(!high) dp[pos][pre] = ans;
        return ans;
    }
    
    int Solve(char *str)
    {
        int i,len = strlen(str);
        for(i = 0; i < len; ++i)
        {
            digit[i] = str[len-i-1]-'a'+1;
        }
        return dfs(len-1,-1,1);
    }
    
    int main()
    {
        memset(dp,-1,sizeof(dp));
        char str[11],i;
        scanf("%s",str);
        for(i = 0; str[i+1]; ++i)
        {
            if(str[i] >= str[i+1])
            {
                puts("0");
                return 0;
            }
        }
        printf("%d
    ",Solve(str));
        return 0;
    }
    




  • 相关阅读:
    light oj 1205
    light oj 1068
    10月29日 小小犇的流水账
    小奇的数列
    10月28日 小小犇的流水账
    10月27日 小小犇的流水账
    2018.10.27 搬砖题解
    10月26日 小小犇的流水账
    10月25日 小小犇的流水账
    10月24日 小小犇的流水账
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6956123.html
Copyright © 2011-2022 走看看