1055: [HAOI2008]玩具取名

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1144  Solved: 668
[Submit][Status][Discuss]

Description

某人有一套玩具,并想法给玩具命名。首先他选择WING四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得很长。现在,他想请你猜猜某一个很长的名字,最初可能是由哪几个字母变形过来的。

Input

第一行四个整数W、I、N、G。表示每一个字母能由几种两个字母所替代。接下来W行,每行两个字母,表示W可以用这两个字母替代。接下来I行,每行两个字母,表示I可以用这两个字母替代。接下来N行,每行两个字母,表示N可以用这两个字母替代。接下来G行,每行两个字母,表示G可以用这两个字母替代。最后一行一个长度不超过Len的字符串。表示这个玩具的名字。

Output

一行字符串,该名字可能由哪些字母变形而得到。(按照WING的顺序输出)如果给的名字不能由任何一个字母变形而得到则输出“The name is wrong!”

Sample Input

1 1 1 1
II
WW
WW
IG
IIII

Sample Output

IN

HINT

W可以变成II所以IIII可以缩成WW IN均能变成WW所以WW又可以缩成I或者N 所以最终答案应该按照“WING”的顺序输出IN

[数据范围]

100%数据满足Len<=200,W、I、N、G<=16

 
题解:暴力区间DP
#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
#define maxn 201
vector<int > mp[maxn];
int a,b,c,d,sum;
char ch[],s[];
int dp[][][];
char next[];
int str[];
void stt(char a[])
{
sum=;
if(a[]=='W')
{
sum+=;
}else if(a[]=='I')sum+=;else if(a[]=='N')sum+=;else if(a[]='G')sum+=;
sum*=;
if(a[]=='W')
{
sum+=;
}else if(a[]=='I')sum+=;else if(a[]=='N')sum+=;else if(a[]='G')sum+=;
}
int main()
{ next[]='W';str['W']=;
next[]='I';str['I']=;
next[]='N';str['N']=;
next[]='G';str['G']=;
scanf("%d%d%d%d",&a,&b,&c,&d);
for(int i=;i<=a;i++)
{
scanf("%s",ch);
stt(ch);
//cout<<sum<<endl;
mp[sum].push_back();
}
for(int i=;i<=b;i++)
{
scanf("%s",ch);
stt(ch);
mp[sum].push_back();
}
for(int i=;i<=c;i++)
{
scanf("%s",ch);
stt(ch);
mp[sum].push_back();
}
for(int i=;i<=d;i++)
{
scanf("%s",ch);
stt(ch);
mp[sum].push_back();
}
scanf("%s",s);
memset(dp,,sizeof(dp));
for(int i=;i<strlen(s);i++){
dp[i][i][str[s[i]]]=;
}
int n=strlen(s);
for(int l=;l<=n;l++)
{
for(int i=;i<n-l+;i++)
{
for(int k=i;k<i+l-;k++)
{
for(int j=;j<=;j++)
for(int h=;h<=;h++)
{
if(dp[i][k][j]&&dp[k+][i+l-][h])
{
for(int f=;f<mp[j*+h].size();f++)
{
dp[i][i+l-][mp[j*+h][f]]=;
}
}
}
}
}
}
int flag=;
for(int i=;i<=;i++)
if(dp[][n-][i])cout<<next[i],flag=;
if(!flag)cout<<"The name is wrong!";
cout<<endl;
return ;
}

代码君

BZOJ 1055 区间DP的更多相关文章

  1. BZOJ 1068 (区间DP)

    题意:字符串的压缩,f[l][r][0]代表还没M,f[l][r][1]代表有M. #include<cstdio> #include<cmath> #include<c ...

  2. bzoj 1261 区间DP

    首先我们知道ans=Σ(h[i]*f[i])=Σ(h[i]*d[i])/s=Σ(k(r[i]+1)+c)*d[i]/s=Σ(k*r[i]+(k+c))*d[i]/s 我们可以发现,除了k*r[i]之外 ...

  3. BZOJ 1260 - 区间dp

    Magic Door 题目大意: 给一个字符串,问需要至少覆盖多少次. 题目分析 区间dp: dp[i][j]表示达到i~j这个状态的最少覆盖次数,分两种情况: s[i] == s[j]: 此时内层可 ...

  4. BZOJ 1090 - 区间dp

    Magic Door 题目大意: 给一个字符串,可以将重复的串缩成x(a),表示x个a,求能缩成的最小长度. 题目分析 区间dp: dp[i][j]表示i~j处理后的最小长度, 则有 \[dp[i][ ...

  5. tyvj 1055 区间dp

    P1055 沙子合并 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述     设有N堆沙子排成一排,其编号为1,2,3,…,N(N<=300).每堆沙子 ...

  6. bzoj 1996 区间dp

    1996: [Hnoi2010]chorus 合唱队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 1727  Solved: 1115[Submit][ ...

  7. [CQOI2007]涂色 BZOJ 1260 区间dp

    题目描述 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续的木版涂成一个 ...

  8. BZOJ 2037 区间DP

    跟POJ 3042是一个类型的http://blog.csdn.net/qq_31785871/article/details/52954924 思路: 先排个序 (把初始位置也插进去) f[i][j ...

  9. bzoj1055玩具取名——区间DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1055 区间DP,注意初始化!! 因为没记忆化,TLE了一晚上,区间DP尤其要注意不重复递归! ...

随机推荐

  1. layui timeline使用

    使用layui timeline过程记录: layui官网时间线介绍比较少,可能是太简单了,这里把时间线通过请求后台数据.再自动填写到对应区块,进行了封装: 代码如下: function timeli ...

  2. React开发实时聊天招聘工具 -第四章 Redux

    复杂以后 setState 就不太方便了 所以使用Redux来管理 React只负责View. Store.State.Dispatch.Reducer reducer(state,action) { ...

  3. cssrefresh.js-CSS文件自动刷新

    一.如何使用cssrefresh.js 使用很简单,类似下面的代码: <head> <link rel="stylesheet" type="text/ ...

  4. 全国绿色计算大赛 模拟赛第一阶段(Python)

    第1关求和 class Task: def getSum(self, num1, num2): sum = 0 for i in range(num1, num2 + 1): while (i != ...

  5. 在SpringBoot框架中使用拦截器

    1.继承WebMvcConfigureAdapter类,覆盖其addInterceptors接口,注册我们自定义的拦截器 package com.eth.wallet.config; import c ...

  6. YOLOv3配置(win10+opencv3.40+cuda9.1+cudnn7.1+vs2015)

    最近心血来潮想学一下YOLOv3,于是就去网上看了YOLOv3在win10下的配置教程.在配置过程中塌坑无数,花了很多时间和精力,所以我想就此写一篇博客来介绍在在win10+vs2015的环境下如何配 ...

  7. Codeforces 805 D Minimum number of steps

    题意: 给定一串字符串,将所有“ab”的子串替换为“bba”,询问多少次操作后没有子串“ab”. 分析: 观察可得,将“ab”替换为“bba”有两种结果. ①a移到了b的后面 ②增加了一个b 而且最终 ...

  8. python后端开发工程师考证试题

    python开发工程师考证试题 问答题链接 python开发工程师考证试题 选择题 题目 关于 Python 程序格式框架的描述,以下选项中错误的是 ( A ) A: Python 语言不采用严格的“ ...

  9. AspNetPager控件的简单使用

    1.首先引用这个控件. 在前台页面上修改一些属性. <webdiyer:AspNetPager ID=" AlwaysShow="true" FirstPageTe ...

  10. Chrome new features

    Chrome new features copy fetch url fetch("http://10.1.5.202/deploy/http/send/svnuser", { & ...