Bzoj 1055: [HAOI2008]玩具取名 (区间DP)

题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1055

区间动态规划和可达性DP的好题.

开始WA了几次,感到非常奇怪.

原因竟然是n被定义了char型,真是zz了.

\(f[i][j][k]\)表示区间\(i\)到\(j\)可以由\(k\)这个字符是否可以转变过来.

转移的时候枚举中间点转移就好了.

#include <iostream>
#include <cstring>
#include <cstdio>
const int maxN = 200 + 7;
using namespace std; const char Q[] = {' ','W','I','N','G'}; bool f[maxN][maxN][5];
bool is_match[5][5][5];
int q[5];
char s[maxN],c[5]; inline int pd(char i){
if(i == Q[1]) return 1;
if(i == Q[2]) return 2;
if(i == Q[3]) return 3;
if(i == Q[4]) return 4;
} int main() {
for(int i = 1;i <= 4;++ i)
scanf("%d",&q[i]);
for(int i = 1;i <= 4;++ i) {
for(int j = 1;j <= q[i];++ j) {
scanf("%s",c);
is_match[i][pd(c[0])][pd(c[1])] = true;
}
}
scanf("%s",s + 1);
int n = strlen(s + 1);
for(int i = 1;i <= n;++ i)
f[i][i][pd(s[i])] = true;
for(int leg = 1;leg < n;++ leg) {
for(int l = 1;l + leg <= n;++ l) {
int r = l + leg;
for(int k = l;k < r;++ k) {
for(int i = 1;i <= 4;++ i) { //枚举 l 到 r 的字符
for(int j = 1;j <= 4;++ j) {// 枚举l 到 k 的字符
for(int a = 1;a <= 4;++ a) { //枚举k + 1到r的字符
if(is_match[i][j][a]) {
if( f[l][k][j] && f[k + 1][r][a])
f[l][r][i] = 1;
}
}
}
}
}
}
}
bool flag = false;
for(int i = 1;i <= 4;++ i)
if(f[1][n][i]) flag = true,printf("%c",Q[i]);
if(!flag) puts("The name is wrong!");
return 0;
}

最新文章

  1. 使用python操作FTP上传和下载
  2. 使用C#向后台ACCESS数据库添加数据
  3. MAFFT多重序列比对--(附比对彩标方法)
  4. class属性中为什会添加非样式的属性值?
  5. HDU 4910 Problem about GCD 找规律+大素数判断+分解因子
  6. oracle触发器详解(转)
  7. php验证复选框有效性的示例
  8. SharePoint 2013 搜索SharePoint 特定列和特定文档(自己定义搜索)
  9. apicloud ios 打包流程
  10. 【Maven】项目中没有resources目录
  11. Android CoordinatorLayout、AppBarLayout、DrawerLayout、NavigationView 的使用及问题小结
  12. SpringBoot2.0之二 新建RESTfull风格项目
  13. Day3--Python--字符串,for循环,迭代
  14. SpringMVC+MyBatis+Druid使用MySQL8.0.11版本
  15. &lt;airsim文档学习&gt; Street View Image, Pose, and 3D Cities Dataset
  16. MATLAB 到 Python之路1_数据结构和简单操作
  17. find查找时排除目录及文件
  18. Error: MDM failed command. Status: Only a single SDC may be mapped to this volume at a time
  19. jsonrpc.js -- 原生js实现 JSON-RPC 协议
  20. lua和C++交互的lua栈操作——以LuaTinker为例

热门文章

  1. DOM0、DOM2级事件
  2. 结合 webpack 使用 vue-router(七)
  3. Python爬虫|爬取喜马拉雅音频
  4. st表求区间最大值
  5. mysql8必知必会6 外键约束 增加 查询 删除 MySQL注释
  6. python连接redis数据库的两种方式
  7. Qt 进程和线程之一:运行一个进程和进程间通信
  8. Hive_Hive的数据类型
  9. 模拟IO 读写压力测试
  10. linux 下vim中关于删除某段,某行,或全部删除的命令