随机字符串 题目描述 起名字什么的最麻烦,我们来生成一些随机字符串吧 生成的字符串当然是有要求的: 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; }