不难想,就是处理起来比较麻烦

设f[i][j][k]为是否可以把区间(i,j)合并为k,初始状态是f[i][j][s[i]]=1,转移的话另一段枚举长度x,向(i-x,j),(i,j+x)转移

把四个字符hash成1234比较好写(大概

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=205;
int n,c[10],mp[N];
bool f[N][N][10],fl,a[10][10][10];
char ch[5],s[N],rl[10];
int main()
{
mp['W']=1,mp['I']=2,mp['N']=3,mp['G']=4;
rl[1]='W',rl[2]='I',rl[3]='N',rl[4]='G';
scanf("%d%d%d%d",&c[1],&c[2],&c[3],&c[4]);
for(int i=1;i<=4;i++)
for(int j=1;j<=c[i];j++)
{
scanf("%s",ch+1);
a[mp[ch[1]]][mp[ch[2]]][i]=1;
}
scanf("%s",s+1);
n=strlen(s+1);
for(int i=1;i<=n;i++)
s[i]=mp[s[i]],f[i][i][s[i]]=1;
for(int l=1;l<n;l++)
for(int i=1;i+l-1<=n;i++)
{
int j=i+l-1;
for(int k=1;k<=4;k++)
if(f[i][j][k])
{
for(int x=1;x<=l&&j+x<=n;x++)
for(int y=1;y<=4;y++)
if(f[j+1][j+x][y])
for(int z=1;z<=4;z++)
if(a[k][y][z])
f[i][j+x][z]=1;
for(int x=1;x<=l&&i-x>=1;x++)
for(int y=1;y<=4;y++)
if(f[i-x][i-1][y])
for(int z=1;z<=4;z++)
if(a[y][k][z])
f[i-x][j][z]=1;
}
}
for(int i=1;i<=4;i++)
if(f[1][n][i])
printf("%c",rl[i]),fl=1;
if(!fl)
puts("The name is wrong!");
return 0;
}

最新文章

  1. mysql查询本周、月、季度、年
  2. 工作中的sql语句总结
  3. 网站推广优化(SEO,网站关键字优化,怎么优化网站,如何优化网站关键字)
  4. ios webview 只能播放带域名的视频连接好奇怪!
  5. Oracle之物化视图
  6. Javascript中大括号“{}”的多义性
  7. KMP算法的Next数组详解
  8. C++ Socket编程步骤 【转】
  9. C# 多线程基础
  10. UESTC_秋实大哥与快餐店 2015 UESTC Training for Data Structures&lt;Problem C&gt;
  11. 解决VS2010打开Web页面时经常由于内存较低而导致VS2010自动关闭的问题
  12. C/C++指针的指针(**p)和指针的引用(*&amp;amp;)使用案例分析
  13. 比特(bit)、字,字节(B)存储单位之间的关系+其与操作系统位数的关系+不同编译器编译方式下数据类型的表示范围
  14. MySQL数据库“十宗罪”(十大经典错误案例)
  15. CentOS6.3 下安装codeblocks
  16. PPTP支持IPv6
  17. c++ 的绝对值函数
  18. redis主从复制和sentinel配置高可用
  19. 若依项目整合eCharts实现图表统计功能
  20. REST easy with kbmMW #21 – Delphi client stubs

热门文章

  1. jsoup 提取 html 中的所有链接、图片和媒体
  2. oracle coherence介绍及使用
  3. c++之NVI手法
  4. js中的自定义异常处理函数
  5. kd树 hdu2966 In case of failure
  6. Nuget公布Dll
  7. java数据库连接池技术简单使用
  8. Mongodb for PHP教程之入门安装
  9. 使用7zip压解各种文件的经常使用命令
  10. Python 离线等价类