BZOJ 1055 DP
2024-09-07 00:06:02
思路:
f[i][j][k]表示i到j匹配了字母k
if(m,n能匹配上k)
f[i][j][k]|=f[i][l][m]&f[l+1][j][n]
一个大枚举 就OK了~
//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int W,I,N,G;
bool f[205][205][5],vis[5][5][5],flag;
char ch[3],goal[222];
int get(char x){
if(x=='W')return 1;
if(x=='I')return 2;
if(x=='N')return 3;
return 4;
}
int main(){
scanf("%d%d%d%d",&W,&I,&N,&G);
for(int i=1;i<=W;i++)
scanf("%s",ch),vis[1][get(ch[0])][get(ch[1])]=1;
for(int i=1;i<=I;i++)
scanf("%s",ch),vis[2][get(ch[0])][get(ch[1])]=1;
for(int i=1;i<=N;i++)
scanf("%s",ch),vis[3][get(ch[0])][get(ch[1])]=1;
for(int i=1;i<=G;i++)
scanf("%s",ch),vis[4][get(ch[0])][get(ch[1])]=1;
scanf("%s",goal+1);
int len=strlen(goal+1);
for(int i=1;i<=len;i++)f[i][i][get(goal[i])]=1;
for(int le=1;le<=len;le++)
for(int st=1;st<=len;st++){
int ed=st+le;
if(ed>len)break;
for(int k=1;k<=4;k++)
for(int l=st;l<ed;l++)
for(int m=1;m<=4;m++)
for(int n=1;n<=4;n++)
if(vis[k][m][n])
f[st][ed][k]|=f[st][l][m]&f[l+1][ed][n];
}
if(f[1][len][1])putchar('W'),flag=1;
if(f[1][len][2])putchar('I'),flag=1;
if(f[1][len][3])putchar('N'),flag=1;
if(f[1][len][4])putchar('G'),flag=1;
if(!flag)puts("The name is wrong!");
}
最新文章
- RocketMQ原理解析-NameServer
- 德国W家HIPP 奶粉有货播报:2014.7.8 HIPP 奶粉 1+ 4盒装有货啦!
- AngularJs filter 过滤器
- JAVA环境安装
- Oracle- PL/SQL DEV的远程配置
- Delphi 2007体验!
- Halcon算子--区域特征
- SpringBoot基础系列一
- jQuery入门学习
- Python 数据可视化 -- pillow 处理图像
- UVA1623-Enter The Dragon(并查集)
- Python图形编程探索系列-02-框架设计
- js区别手机和电脑打开网页
- 学习protobuf 感想
- android中RecyclerView控件的列表项横向排列
- bash脚本 while语法
- Github for Windows 登录时报代理问题?
- Kubernetes学习之路(十二)之Pod控制器--ReplicaSet、Deployment
- 第五章 类加载器ClassLoader源码解析
- SQL优化:清理生产环境中已失效字段基本步骤
热门文章
- 【Python常见问题总结】
- Linux 程序包管理-RPM
- 二叉排序树(B-Tree)-c实现
- Zookeeper入门-Linux环境下异常ConnectionLossException解决
- 微信小程序踩坑记
- 【BZOJ 1179】[Apio2009]Atm
- C++容器(三):pair类型
- hadoop-16-sqoop导入oracle数据
- [Angular] Create a ng-true-value and ng-false-value in Angular by controlValueAccessor
- 对于startActivity的使用改进