概述
Description
给出一个字符串,每次可以把相连两个字母一个变成字母表前一个一个变成字母表后一个,问最多可以形成多少个不同的字符串
Input
第一行一整数 T(T≤10000) 表示用例组数,每组用例输入一个只由小写字母组成的字符串,长度不超过 100
Output
对于每组用例,输出最多可以形成多少个不同的字符串,结果模 109+7
Sample Input
1
ab
Sample Output
1
Solution
操作其实就是把这个字符串的总权值(每个字符的
ASCII
码之和)重新分配,
dp[i][j]
表示前
i
个字符
Code
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<ctime>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
const int INF=0x3f3f3f3f,maxn=105;
#define mod 1000000007
int T,dp[maxn][maxn*26];
char s[maxn];
int main()
{
dp[0][0]=1;
for(int i=1;i<=100;i++)
for(int j=0;j<=(i-1)*26;j++)
for(int k=0;k<26;k++)
{
dp[i][j+k]+=dp[i-1][j];
if(dp[i][j+k]>=mod)dp[i][j+k]-=mod;
}
scanf("%d",&T);
while(T--)
{
scanf("%s",s);
int len=strlen(s),res=0;
for(int i=0;i<len;i++)res+=s[i]-'a';
printf("%dn",dp[len][res]-1);
}
return 0;
}
最后
以上就是欣慰犀牛为你收集整理的CodeForces 156 C.Cipher(dp)的全部内容,希望文章能够帮你解决CodeForces 156 C.Cipher(dp)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复