区间DP

luogu 4290

明显的区间DP.

定义

dp[l][r][k]/*表示区间[l,r]能否凑成k(W,I,N,G)字符*/
mp['W']=1;mp['I']=2;mp['N']=3;mp['G']=4;

之后选择比较好写的记忆化搜索去完成

记录1  记录2  记录3

AC码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; int na[],dp[][][],mp[],len;
char change[][][],toy[],h[]={' ','W','I','N','G'}; bool dfs(int l,int r,int k)
{
if(l==r) return toy[l]==h[k];//len<=1,不能换了
int& res=dp[l][r][k];
if(~res) return res;//11,12行这样更快,不会T掉,可以看上面的记录
for(int i=;i<=na[k];i++)
for(int j=l;j<r;j++)
if(dfs(l,j,mp[change[k][i][]])&&dfs(j+,r,mp[change[k][i][]]))
return res=;
return res=;
} int main()
{
memset(dp,-,sizeof(dp));
for(int i=;i<=;i++) scanf("%d",&na[i]);
for(int i=;i<=;i++)
{
for(int j=;j<=na[i];j++)
{
scanf("%s",&change[i][j]);
}
}
scanf("%s",toy+);
len=strlen(toy+);
bool flag=;
mp['W']=;mp['I']=;mp['N']=;mp['G']=;
for(int i=;i<=;i++)
if(dfs(,len,i))
{
flag=;
printf("%c",h[i]);
}
if(!flag) puts("The name is wrong!");
return ;
}

2019-09-19 22:22:05

2019年9月训练(贰)区间DP (luogu 4290)的更多相关文章

  1. 2019年9月训练(壹)数位DP (HDU 2089)

    开学之后完全没时间写博客.... HDU 2089 不要62(vjudge) 数位DP 思路: 题目给出区间[n,m] ,找出不含4或62的数的个数 用一个简单的差分:先求0~m+1的个数,再减去0~ ...

  2. 专题训练之区间DP

    例题:以下例题部分的内容来自https://blog.csdn.net/my_sunshine26/article/details/77141398 一.石子合并问题 1.(NYOJ737)http: ...

  3. 2019年5月训练记录(更新ing)

    前言 \(ZJOI\)正式结束了. 但期中考试只考了年级\(216\),退役既视感... 于是就被抓回去补文化课了. 下半个学期可能要以文化课为主了吧! 但周三.周日应该还是会正常参加训练的,但其他时 ...

  4. HDU5115 Dire Wolf(区间DP)

    渐渐认识到区域赛更侧重的是思维及基本算法的灵活运用,而不是算法的量(仅个人见解),接下来要更多侧重思维训练了. 区间DP,dp[i][j]表示从i到j最终剩余第i 与第j只的最小伤害值,设置0与n+1 ...

  5. hdu5115 Dire Wolf【区间dp】

    转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4361169.html   ---by 墨染之樱花 [题目链接]http://acm.hdu.e ...

  6. 算法提高 矩阵乘法 区间DP

    这是神题,n <= 1000,如果是极限数据普通的n^3区间DP怎么可能过?可偏偏就过了. 刘汝佳大哥的训练指南上面说的存在nlgn的算法解决矩阵链乘问题,可是百度都找不到.... AC代码 # ...

  7. hdu 2476 区间dp

    题意: 给出两个串s1和s2,一次只能将一个区间刷一次,问最少几次能让s1=s2 例如zzzzzfzzzzz,长度为11,我们就将下标看做0~10 先将0~10刷一次,变成aaaaaaaaaaa 1~ ...

  8. POJ 1141 Brackets Sequence(区间DP, DP打印路径)

    Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...

  9. 括号匹配问题(区间dp)

    简单的检查括号是否配对正确使用的是栈模拟,这个不必再说,现在将这个问题改变一下:如果给出一个括号序列,问需要把他补全成合法最少需要多少步? 这是一个区间dp问题,我们可以利用区间dp来解决,直接看代码 ...

随机推荐

  1. 集合家族——Vector

    一.vector简介 Vector 可以实现可增长的对象数组.与数组一样,它包含可以使用整数索引进行访问的组件.不过,Vector 的大小是可以增加或者减小的,以便适应创建 Vector 后进行添加或 ...

  2. c++中类的初次接触

    下面是我写的简单的代码,初次接触c++中的类,c++真的是博大精深啊,学习c++的路还很长,加油! /*q1.cpp*/ //一个简单的类极其实例化 #include<iostream> ...

  3. C++cctype软件包函数摆脱,ASCII码!

    对于字符,你是否还在用ASCII码? 下面是C++的函数库,摆脱ASCI码! 1.isalnum(): 判断是否为数字和字母 2.isalpha(): 判断是否是字母 3.iscntrl(): 判断是 ...

  4. Spring Boot中的事务管理 隔离级别

    在声明事务时,只需要通过value属性指定配置的事务管理器名即可,例如:@Transactional(value="transactionManagerPrimary"). 除了指 ...

  5. C#调用新浪微博API

    WebRequest wq = WebRequest.Create(this.address); HttpWebRequest hq = wq as HttpWebRequest; string us ...

  6. myeclipse使用SVN分支与合并详解

    此博文主要内容来源地址:https://blog.csdn.net/liuyifeng1920/article/details/53118183,感谢原创博主: 先介绍一下svn的两种开发和发布的规范 ...

  7. 第二届强网杯部分题writeup

    0x00 题目名称 签到 操作内容:   FLAG值: flag{welcome_to_qwb} 0x01 题目名称 Weclome 操作内容: 通过查看文件发现是一个bmp格式的图片文件,然后加上后 ...

  8. SRS之SrsHlsCache::reap_segment详解

    1. 是否可切片的检测 首先在调用 SrsHlsCache::reap_segment 函数进行切片时,针对音频或视频,都会有一个函数来进行检测当前片的时长是否符合所要求的时长. 对于音频,会调用 S ...

  9. Ubuntu 安装 JDK1.8

    以下是Ubuntu 14.04安装JDK1.8.0_25与配置环境变量过程笔记. 1.源码包准备: 首先到官网下载jdk,http://www.oracle.com/technetwork/java/ ...

  10. Qt事件机制浅析

    Qt事件机制 Qt程序是事件驱动的, 程序的每个动作都是由幕后某个事件所触发.. Qt事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. Qt事件的类型很多, 常见的qt的事件如下: 键盘事 ...