[bzoj1055][HAOI2008]玩具取名_区间dp】的更多相关文章

玩具取名 bzoj-1055 HAOI-2008 题目大意:给你一个用W,I,N,G组成的字符串,给你一些这四个字符之间的变换规则,每一个变换规则都是由一个字符变成两个字符,问这个字符串是否可能是由一个单独的字符变成的. 注释:$1\le Len\le 200$,每种字符的变换规则<=16 想法:刚看见题以为又是什么单词接龙之类的题,然后看了一眼数据范围... ...还是不会. 查了题解,发现是一个挺不常见的bool区间dp 状态:dp[i][j][c]表示[i,j]这段区间是否能变成c字符,c…
题目 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得很长. 现在,他想请你猜猜某一个很长的名字,最初可能是由哪几个字母变形过来的. 输入格式 第一行四个整数W.I.N.G.表示每一个字母能由几种两个字母所替代.接下来W行,每行两个字母,表示W可 以用这两个字母替代.接下来I行,每行两个字母,表示I可以用这两个字母替代.接下来N行,每行两个字母,…
[HAOI2008]玩具取名 题目描述 某人有一套玩具,并想法给玩具命名.首先他选择\(WING\)四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用"\(WING\)"中任意两个字母代替,使得自己的名字能够扩充得很长. 现在,他想请你猜猜某一个很长的名字,最初可能是由哪几个字母变形过来的. 输入输出格式 输入格式: 第一行四个整数\(W.I.N.G\).表示每一个字母能由几种两个字母所替代. 接下来\(W\)行,每行两个字母,表示W可以用这两个…
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1258  Solved: 729[Submit][Status][Discuss] Description 某 人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用 “WING”中任意两个字母代替,使得自己的名字能够扩充得很长.现在,他想请你猜猜某一个很长的名字,最初可能…
Description 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得很长. 现在,他想请你猜猜某一个很长的名字,最初可能是由哪几个字母变形过来的. Input 第一行四个整数W.I.N.G.表示每一个字母能由几种两个字母所替代.接下来W行,每行两个字母,表示W可 以用这两个字母替代.接下来I行,每行两个字母,表示I可以用这两个字母替代.接下来…
不难想,就是处理起来比较麻烦 设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[…
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1588  Solved: 925[Submit][Status][Discuss] Description 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得很长. 现在,他想请你猜猜某一个很长的名字,最初可能…
1055: [HAOI2008]玩具取名 题目:传送门 简要题意: 就是固定四个字母,给出这四个字母分别可以由哪两个字母组成,然后在给你一个字符串,要求把这个字符串还原成原始的四个字母的其中一个. 题解: 一开始看题有点瞎...想了想是一道超级大难题... 其实就是一个很简单的DP... 定义发f[i][j][s]:表示在字符串中i~j这个区间是否可以组合成为字符s 转移很容易就可以想出来:因为如果f[i][k][s1]==f[k+1][j][s2]==1(i<=k<=j) &&…
http://www.lydsy.com/JudgeOnline/problem.php?id=1055 区间DP dp[i][j][k] 表示区间[i,j]能否合成k #include<cstdio> #include<cstring> using namespace std; ][][]; ]; ][][]; int turn(char c) { ; ; ; ; } int main() { //freopen("name.in","r"…
... #include<bits/stdc++.h> using namespace std; int q[255]; char s[205]; char p[]={'W','I','N','G'}; int f[205][205][4],num[4]; char a[4][20][2]; bool dp(int l,int r,int k){   if(l==r)return (s[l]==p[k]);   int &res=f[l][r][k];   if(res!=-1)ret…