CF156C Cipher

CF156C Cipher
首先可以发现,不管怎么操作,Ascll码的和是不变的
所以可以先dp出每种长度,每个Ascll码和的答案
f [ i ] [ j ] 表 示 长 度 为 i , A s c l l 码 和 为 j 的 方 案 数 f[i][j]表示长度为i,Ascll码和为j的方案数 f[i][j]iAscllj
预处理出来然后每次输出就好了
要注意减去原来的,即-1

#include<bits/stdc++.h>
#define mod 1000000007
#define N 105
using namespace std;
int f[N][26 * N], n;
char st[N];
int main() {
	f[0][0] = 1;
	for(int i = 1; i <= 101; i ++)
		for(int j = i; j <= 26 * i; j ++)
			for(int k = 1; k <= min(j, 26); k ++)
				f[i][j] = (f[i][j] + f[i - 1][j - k]) % mod;
	scanf("%d", &n);
	while(n --) {
		scanf("%s", st + 1);
		int len = strlen(st + 1), ret = 0;
		for(int i = 1; i <= len; i ++) ret += st[i] - 'a' + 1;
		printf("%d\n", (f[len][ret] - 1 + mod) % mod);	
	}
	
	return 0;
}
posted @ 2020-11-06 07:45  lahlah  阅读(32)  评论(0编辑  收藏  举报