Bzoj 1055: [HAOI2008]玩具取名 (区间DP)
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;
}
Bzoj 1055: [HAOI2008]玩具取名 (区间DP)的更多相关文章
- [BZOJ 1055][HAOI2008]玩具取名(DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1055 分析: 比较难想的dp f[i][j][c]表示i..j能否压缩成字符c 那么怎 ...
- bzoj 1055 [HAOI2008]玩具取名(区间DP)
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1258 Solved: 729[Submit][Statu ...
- BZOJ1055: [HAOI2008]玩具取名[区间DP]
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1588 Solved: 925[Submit][Statu ...
- BZOJ 1055 [HAOI2008]玩具取名
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1119 Solved: 653[Submit][Statu ...
- [BZOJ 1055] [HAOI2008] 玩具取名 【记忆化搜索】
题目链接:BZOJ - 1055 题目分析 这种类似区间 DP 的记忆化搜索都是很相近的,比如字符串压缩和字符串扩展都差不多. 都是将现在 Solve 的区间分成子区间,再求解子区间. 这道题 Sol ...
- [LUOGU] P4290 [BZOJ] 1055 [HAOI2008]玩具取名
题目描述 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用"WING"中任意两个字母代 ...
- bzoj 1055: [HAOI2008]玩具取名【区间dp】
不难想,就是处理起来比较麻烦 设f[i][j][k]为是否可以把区间(i,j)合并为k,初始状态是f[i][j][s[i]]=1,转移的话另一段枚举长度x,向(i-x,j),(i,j+x)转移 把四个 ...
- 【BZOJ】1055: [HAOI2008]玩具取名(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1055 我竟然都没往dp这个方向想.....百度了下看到标题是dp马上就会转移了QAQ... 设d[i ...
- BZOJ 1055: [HAOI2008]玩具取名(记忆化搜索)
http://www.lydsy.com/JudgeOnline/problem.php?id=1055 题意: 思路:记忆化搜索. #include<iostream> #include ...
随机推荐
- Spring Cloud:使用Ribbon实现负载均衡详解(上)
1. 什么是 Ribbon? Spring Cloud Ribbon 是一套实现客户端负载均衡的工具.注意是客户端,当然也有服务端的负载均衡工具,我们后面再介绍.可以认为 Ribbon 就是一个负载均 ...
- 初入Three.js 第一章
一.什么是WebGL? 1.WebGL是在浏览器中实现三维效果的一套规范. 二.什么是threejs? 1.你将它理解成three + js就可以了.three表示3D的意思,js表示javascri ...
- C# 基础之字段与属性
1.属性是字段的扩展 2.根据面向对象封装思想,字段最好设为private(私有),这样有利于防止客户端对字段的篡改,从而保证了成员的完整性 3.访问类中私有字段,C#提供了属性,用来对字段进行灵活的 ...
- CF #541div2 E
题目本质:忽略串的变化,只记载26个字母的相关变化. 解决方法: 在上一次与本次的转移过程中,情况并不多,主要取决于本次串的首尾字母,若不是本次的首尾字母,会被置1:如果是的话,分情况接一下并更新.另 ...
- CF #536div2E(dp)
简单入门版:洛谷1280 时间交叉和倒序处理的思路是相同的,相较之下此题更多的条件是:1.每个任务可以在很多个时间点中选一个去做:2.会有捣乱. 解决方法:1.每个时间点选哪个根据规则的话是固定的可预 ...
- HDU6440(费马小定理)
其实我读题都懵逼--他给出一个素数p,让你设计一种加和乘的运算使得\[(m+n)^p = m^p+n^p\] 答案是设计成%p意义下的加法和乘法,这样:\[(m+n)^p\ \%\ p = m+n\] ...
- MVC系列学习(十六)-区域的学习
1.查找控制器的过程 1.1调用其他项目中的控制器 a.先到网站根目录下的bin文件夹下,遍历所有的程序集 b.找到以Controller结尾的类 c.再找出其中继承了Controller的类 d.接 ...
- 爬虫requests库的基本用法
需要注意的几个点: 1.后面的s是一个虚拟目录 2.url后面不用加问号,发起请求的时候会自动帮你加上问号 get_url = 'http://www.baidu.com/s' 3. url的特性:u ...
- hihocoder1766 字符串问题
思路: 不断贪心增加即可. 实现: #include <iostream> #include <cstring> using namespace std; ][]; int m ...
- Ubuntu16.04 + cuda8.0 + GTX1080安装教程
1. 安装Ubuntu16.04 不考虑双系统,直接安装 Ubuntu16.04,从 ubuntu官方 下载64位版本: ubuntu-16.04-desktop-amd64.iso . 在MAC下制 ...