题解 CF156C Cipher
容易发现,如果把字母表映射到 上,那么无论怎么操作总和都不变。
于是可已将问题转化为:有多少种长度为 的序列,满足每个元素在 之间,总和为 。
定义 表示处理到第 个元素,总和为 的合法方案数。
转移方程为 ,其中 。
复杂度 。
code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=100+5,mod=1e9+7;
ll T,f[N][27*N];
string s;
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>T;
f[0][0]=1;
for(int i=1;i<=100;++i){
for(int j=1;j<=2600;++j){
for(int k=1;k<=min(26,j);++k){
f[i][j]=(f[i][j]+f[i-1][j-k])%mod;
}
}
}
while(T--){
cin>>s;
ll sum=0,len=s.size();for(int i=0;i<len;++i)sum+=s[i]-'a'+1;
cout<<f[len][sum]-1<<endl;
}
return 0;
}
本文作者:HQJ2007
本文链接:https://www.cnblogs.com/HQJ2007/p/17561355.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通