【题解】 bzoj1055: [HAOI2008]玩具取名 (动态规划)
Solution:
- 区间动规(以后开始动规会在solution前面标注是啥动规
- 我觉的这道题挺难想了,但其实状态定义了一下子就出来了(还是不行啊)
- 我们定义状态\(dp[i][j][sta]\),表示在\(i\)到\(j\)区间可不可以合成字符\(sta\),这里我们用\(1\)表示\(W\),\(2\)表示\(I\)依次类推
- 转移方程就很简单了:(注意有一个是\(1\)就是\(1\),然后可以\(break\)了) $$dp[i][j][sta]=max((dp[i][k][ left ]),(dp[k+1][j][ right] ))$$.
或者说$$dp[i][j][sta]=((dp[i][k][ left ])&(dp[k+1][j][ right] ))$$ - \(left\)表示某个合成\(sta\)的方法中左边那个字符代表的数字,\(right\)就是右边那个
Attention:
- 注意无解情况输出
Code:
//It is coded by Ning_Mew on 5.10
#include<bits/stdc++.h>
using namespace std;
const int maxn=207;
int n[5],ll=0;
int s[10][20][5];
int goal[maxn];
string ss;
int dp[maxn][maxn][10];
int num[30];
int main(){
scanf("%d%d%d%d",&n[1],&n[2],&n[3],&n[4]);
num['W'-'A'+1]=1;num['I'-'A'+1]=2;
num['N'-'A'+1]=3;num['G'-'A'+1]=4;
for(int i=1;i<=4;i++){
for(int j=1;j<=n[i];j++){
cin>>ss;
s[i][j][1]=num[ss[0]-'A'+1];
s[i][j][2]=num[ss[1]-'A'+1];
}
}
cin>>ss;ll=ss.length();
for(int i=0;i<ll;i++){
dp[i][i][ num[ss[i]-'A'+1] ]=1;
goal[i]=num[ss[i]-'A'+1];
}
for(int len=2;len<=ll;len++){
for(int i=0;i<=ll-len;i++){
int ss=i,tt=i+len-1;
for(int j=ss;j<=tt-1;j++){//中间的断点
for(int sta=1;sta<=4;sta++){
for(int k=1;k<=n[sta];k++){
int ll=s[sta][k][1],rr=s[sta][k][2];
if(dp[ss][j][ll]==1 && dp[j+1][tt][rr]==1){dp[ss][tt][sta]=1;break;}
}
}
}
}
}
bool out=false;
for(int i=1;i<=4;i++){
if(dp[0][ll-1][i]){
if(i==1)printf("W"),out=true;if(i==2)printf("I"),out=true;
if(i==3)printf("N"),out=true;if(i==4)printf("G"),out=true;
}
}
if(!out)printf("The name is wrong!");printf("\n");
return 0;
}
【题解】 bzoj1055: [HAOI2008]玩具取名 (动态规划)的更多相关文章
- bzoj1055: [HAOI2008]玩具取名(dp)
1055: [HAOI2008]玩具取名 题目:传送门 简要题意: 就是固定四个字母,给出这四个字母分别可以由哪两个字母组成,然后在给你一个字符串,要求把这个字符串还原成原始的四个字母的其中一个. 题 ...
- BZOJ1055: [HAOI2008]玩具取名[区间DP]
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1588 Solved: 925[Submit][Statu ...
- BZOJ1055: [HAOI2008]玩具取名
... #include<bits/stdc++.h> using namespace std; int q[255]; char s[205]; char p[]={'W','I','N ...
- bzoj千题计划199:bzoj1055: [HAOI2008]玩具取名
http://www.lydsy.com/JudgeOnline/problem.php?id=1055 区间DP dp[i][j][k] 表示区间[i,j]能否合成k #include<cst ...
- [bzoj1055][HAOI2008]玩具取名_区间dp
玩具取名 bzoj-1055 HAOI-2008 题目大意:给你一个用W,I,N,G组成的字符串,给你一些这四个字符之间的变换规则,每一个变换规则都是由一个字符变成两个字符,问这个字符串是否可能是由一 ...
- BZOJ1055[HAOI2008]玩具取名 【区间dp + 记忆化搜索】
题目 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够 ...
- 【记忆化搜索】bzoj1055 [HAOI2008]玩具取名
f(l,r,c)表示sl...sr能否被合成字符c. #include<cstdio> #include<cstring> using namespace std; int m ...
- BZOJ 1055 HAOI2008 玩具取名 动态规划
题目大意:给定一个由'W','I','N','G'构成的字符串.给定一些规则.这些规则能够将两个字符合成为一个,比如"II"能够合成为'W',"WW"能够合成为 ...
- 【BZOJ1055】[HAOI2008]玩具取名(动态规划)
[BZOJ1055][HAOI2008]玩具取名(动态规划) 题面 BZOJ 洛谷 题解 裸的区间\(dp\),设\(f[i][j][W/I/N/G]\)表示区间\([i,j]\)能否由某个字母替换过 ...
随机推荐
- odoo创建编号
def create(self,cr,uid,vals,context=None): if context is None: context ={} print 111111 print vals[] ...
- 一个struts2程序
1.index.jsp 2.struts.xml 3.Loginaction.java package action; import java.io.File; import java.io.File ...
- springboot整合redis——redisTemplate的使用
一.概述 相关redis的概述,参见Nosql章节 redisTemplate的介绍,参考:http://blog.csdn.net/ruby_one/article/details/79141940 ...
- 2017-2018-2 《网络对抗技术》 20155319 第二周 Exp1 PC平台逆向破解(5)M
2017-2018-2 <网络对抗技术> 20155319 第二周 Exp1 PC平台逆向破解(5)M 一.实践目标 1.1实践介绍 本次实践的对象是一个名为pwn1的linux可执行文件 ...
- 20155320 EXP8 Web基础
20155320 EXP8 Web基础 [基础问题回答] 什么是表单? 表单:可以收集用户的信息和反馈意见,是网站管理者与浏览者之间沟通的桥梁. 表单由文本域.复选框.单选框.菜单.文件地址域.按钮等 ...
- STM32一键下载电路设计原理
先放原理图(补充:图中的BOOT0通过10K的电阻接到地),再解释为什么这么设计: STM32启动方式:BOOT0和 BOOT1用于设置 STM32的启动方式 ,见下表: BOOT0=1,BOOT1= ...
- 【干货】YUM安装PHP 7版本后,增加phalcon框架的报错解决
目录 1.yum安装php 7.x版本,此处部署7.3版本 2.安装phalcon框架 2.1.PHP版本依赖关系 2.2.编译phalcon扩展模块 2.3.增加扩展文件 3.部署phalcon遇到 ...
- Mybatis使用generator自动生成的Example类使用OR条件查询
参考:https://blog.csdn.net/qq_36614559/article/details/80354511 public List<AssetsDevicetypeRefacto ...
- jmeter:正则表达式的使用
Jmeter中正则关联的使用是可以提取动态变化数据进行传递:关联的方式和提取器有多种,这篇先讲解正则表达式怎么来关联(?) 在需要获取数据的http请求上添加后置处理器 比如提取百度title值: 正 ...
- GitHub 新手教程 三,Git Bash
1,通过 开始菜单 启动 Git Bash,或者 在 cmd 下执行以下命令: D:\SoftWare\Git\git-bash.exe --cd-to-home (D:\SoftWare\Git 是 ...