zoukankan      html  css  js  c++  java
  • 【记忆化搜索/数位DP】zznu2175(长度为n的含有ACM的字符串)

    随机字符串
    
    题目描述
    
    起名字什么的最麻烦,我们来生成一些随机字符串吧
    生成的字符串当然是有要求的:
    1.长度不能超过n
    2.字符串中仅包含大写字母
    3.生成的字符串必须包含字符串“ACM”
    
    ok,是不是很简单?现在告诉你n的值,你来告诉我这样的字符串有多少个
    
    输入
    
    输入一个正整数T,代表有T组数据 
    接下来T行,每行一个正整数n,n<=10。 
    
    输出
    
    输出符合条件的字符串的数目
    
    样例输入
    
    1
    3
    
    
    样例输出
    
    1

    题解:

    using namespace std;
    #define inf 0x3f3f3f3f
    #define N 110
    #define ll long long
    
    ll dp[12][5];
    
    ll dfs(int len,int st)
    {
        if(len<1){
            if(st==3)return 1;
            return 0;
        }
        if(dp[len][st]!=-1)return dp[len][st];
        ll s=0;
        for(char i='A';i<='Z';i++){
            if(st==3)
                s+=dfs(len-1,3);
            else if(i=='A')
                s+=dfs(len-1,1);
            else if(i=='C')
                s+=dfs(len-1, st==1?2:0);
            else if(i=='M')
                s+=dfs(len-1,st==2?3:0);
            else
                s+=dfs(len-1,0);
        }
        dp[len][st]=s;
        return s;
    }
    
    int main(){
    
        int T;
        cin>>T;
        memset(dp,-1,sizeof(dp));
        while(T--){
            int n;
            cin>>n;
    
            ll sum=0;
            for(int i=1;i<=n;i++){
                sum+=dfs(i,-1);
            }
           cout<<sum<<endl;
        }
    
        return 0;
    }
    View Code(超简洁!!超简洁!)
    你不逼自己一把,你永远都不知道自己有多优秀!只有经历了一些事,你才会懂得好好珍惜眼前的时光!
  • 相关阅读:
    JDBC
    SQL语法(3)
    数据库设计和三大范式
    SQL语法(2)
    SQL语法(1)
    数据库的概念以及MYSQL的安装和卸载
    IO流(下)
    IO流(上)
    bash: javac: command not found...
    R语言绘制地图
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/9768916.html
Copyright © 2011-2022 走看看