我是靠谱客的博主 美满小馒头,最近开发中收集的这篇文章主要介绍【DP】-Codeforces Round #110 (Div. 1)-C. Cipher,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

个人觉得很神奇的一道DP……

题目要求求出给出字符串经过题目要求的变换可以得到多少各不同的字符串。可以证明的是,这些字符串加起来的和都一样,所以dp[i][j]的i表示的是字符串的长度,j表示的是字符串所有字母加起来的和,状态转移方程为dp[i+1][j+k]+=dp[i][j](1<=k<=26).

题目

#include<iostream>
#include<cstdio>
using namespace std;
#define mod 1000000007
int dp[105][2650];
int main()
{
//freopen("a.txt","r",stdin);
int i,j,k,m,n,t;
char s[105];
memset(dp,0,sizeof(dp));
for(dp[0][0]=1,i=0;i<100;i++)
for(j=0;j<=2600;j++)
if(dp[i][j])
{
for(k=1;k<=26;k++)
(dp[i+1][j+k]+=dp[i][j])%=mod;
}
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
n=strlen(s);
m=0;
for(i=0;i<n;i++)
m+=s[i]-'a'+1;
printf("%dn",dp[n][m]-1);
}
return 0;
}


最后

以上就是美满小馒头为你收集整理的【DP】-Codeforces Round #110 (Div. 1)-C. Cipher的全部内容,希望文章能够帮你解决【DP】-Codeforces Round #110 (Div. 1)-C. Cipher所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部