博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 2272 [Usaco2011 Feb]Cowlphabet
阅读量:6930 次
发布时间:2019-06-27

本文共 1546 字,大约阅读时间需要 5 分钟。

BZOJ_2272

    可以用f[i][j][k]表示递推到第i个字符时,大写字符已经有了j个,且最后一个字符是k,这样总状态一共约有500*250*52,总的状态转移次数约有500*250*200,是可以承受的。

#include
#include
#include
#include
#define MOD 97654321int N, U, L, P, f[2][260][128];std::vector
g[128];void init(){ N = U + L; char b[5]; for(int i = 0; i < 128; i ++) g[i].clear(); for(int i = 0; i < P; i ++) { scanf("%s", b); g[b[1]].push_back(b[0]); }}void solve(){ int cur = 0, ans = 0; memset(f[0], 0, sizeof(f[0])); for(int i = 'a'; i <= 'z'; i ++) f[0][0][i] = 1; for(int i = 'A'; i <= 'Z'; i ++) f[0][1][i] = 1; for(int i = 2; i <= N; i ++) { cur ^= 1; for(int j = 0; j <= U; j ++) { for(int k = 'A'; k <= 'Z'; k ++) { f[cur][j][k] = 0; if(j > 0) for(int t = 0; t < g[k].size(); t ++) f[cur][j][k] = (f[cur][j][k] + f[cur ^ 1][j - 1][g[k][t]]) % MOD; } for(int k = 'a'; k <= 'z'; k ++) { f[cur][j][k] = 0; for(int t = 0; t < g[k].size(); t ++) f[cur][j][k] = (f[cur][j][k] + f[cur ^ 1][j][g[k][t]]) % MOD; } } } for(int i = 'a'; i <= 'z'; i ++) ans = (ans + f[cur][U][i]) % MOD; for(int i = 'A'; i <= 'Z'; i ++) ans = (ans + f[cur][U][i]) % MOD; printf("%d\n", ans);}int main(){ while(scanf("%d%d%d", &U, &L, &P) == 3) { init(); solve(); } return 0;}

 

 

转载地址:http://zymjl.baihongyu.com/

你可能感兴趣的文章
Android Export aborted because fatal error were fo
查看>>
简略加密字符串
查看>>
工作笔记——Nginx配置HTTPS访问
查看>>
Linux命令大全
查看>>
码农创业:6年80万,有梦想才可能有机会
查看>>
Bitmap算法
查看>>
据说是iOS开发一年总结的笔记
查看>>
pdo数据库操作类
查看>>
在window平台下模拟Liunx使用GCC环境进行编译C的SO库。
查看>>
从0到1使用Kubernetes系列(四):搭建第一个应用程序
查看>>
原来一直纠结MQ的用法,今天看到了一个最经典的例子。
查看>>
向量空间
查看>>
[日推荐]『共享记账』你的私人会计师!
查看>>
Cocoa 用户界面组件使用指导(教程翻译)
查看>>
apache 日志不记录图片 css js 文件访问
查看>>
HttpClientUtils.java
查看>>
git 常用命令
查看>>
共同编写 Smart 2.0 开发指南
查看>>
Resource is out of sync with the file system的解决办法
查看>>
Git获取某个分支的特定文件夹或者文件
查看>>