关键词:
1055: [HAOI2008]玩具取名
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1560 Solved: 907
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
II
WW
WW
IG
IIII
Sample Output
HINT
Source
Solution
区间DP
暴力转移就可以...就是比人家慢个10多倍罢了
f[l][r][k]表示[l,r]是否能压成k
然后枚举区间长度,枚举左端点,枚举WING,枚举WING的每种缩,枚举断点
总之就是暴力转移,然后就可以了
Code
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<map> using namespace std; char s[5][17][3],S[210],N[5],c[5]; map<char,int>mp; bool f[210][210][5]; int main() { scanf("%d%d%d%d",&N[1],&N[2],&N[3],&N[4]); mp[‘W‘]=1,mp[‘I‘]=2,mp[‘N‘]=3,mp[‘G‘]=4; c[1]=‘W‘,c[2]=‘I‘,c[3]=‘N‘,c[4]=‘G‘; for (int i=1; i<=4; i++) for (int j=1; j<=N[i]; j++) scanf("%s",s[i][j]+1); scanf("%s",S+1); int len=strlen(S+1); for (int i=1; i<=len; i++) f[i][i][mp[S[i]]]=1; for (int i=2; i<=len; i++) for (int j=1; j<=len; j++) if (j+i-1<=len) { int L=j,R=j+i-1; for (int k=1; k<=4; k++) for (int l=1; l<=N[k]; l++) for (int m=L; m<R; m++) f[L][R][k]|=(f[L][m][ mp[ s[k][l][1] ]] & f[m+1][R][ mp[ s[k][l][2] ]]); } for (int i=1; i<=4; i++) if (f[1][len][i]) putchar(c[i]); if (!f[1][len][1] && !f[1][len][2] && !f[1][len][3] && !f[1][len][4]) puts("The name is wrong!"); return 0; }
bzoj1055[haoi2008]玩具取名区间dp
1055:[HAOI2008]玩具取名TimeLimit: 10Sec MemoryLimit: 162MBSubmit: 2204 Solved: 1288[Submit][Status][Discuss]Description 某人有一套玩具,并想法给玩具命名。首先他选择WING四个字母中的任意一个字母作为玩 查看详情
bzoj1055玩具取名(区间dp)
很显然的区间DP,定义dp[i][j][k],如果dp[i][j][k]=1表示字符串[i,j]可以组成k字符。#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<vector>#include<queue>#include& 查看详情
bzoj1055[haoi2008]玩具取名区间dp(代码片段)
题面题目传送门解法直接区间dp即可时间复杂度:(O(16n^3))代码#include<bits/stdc++.h>#defineN210usingnamespacestd;structNodeintx,y;a[5][N];ints[5],p[5][5][5];boolf[N][N][5],vis[N][N][5];intnum(charch)if(ch==‘W‘)retur 查看详情
bzoj1055:[haoi2008]玩具取名(dp)
1055:[HAOI2008]玩具取名题目:传送门 简要题意: 就是固定四个字母,给出这四个字母分别可以由哪两个字母组成,然后在给你一个字符串,要求把这个字符串还原成原始的四个字母的其中一个。题解: 一开始看题... 查看详情
题解bzoj1055:[haoi2008]玩具取名(动态规划)
bzoj1055,懒得复制,戳我戳我Solution:区间动规(以后开始动规会在solution前面标注是啥动规我觉的这道题挺难想了,但其实状态定义了一下子就出来了(还是不行啊)我们定义状态\(dp[i][j][sta]\),表示在\(i\)到\(j\)区间可不可以合成... 查看详情
bzoj千题计划199:bzoj1055:[haoi2008]玩具取名
http://www.lydsy.com/JudgeOnline/problem.php?id=1055 区间DPdp[i][j][k]表示区间[i,j]能否合成k #include<cstdio>#include<cstring>usingnamespacestd;boolok[4][4][4];chars[201];booldp[201][201][ 查看详情
bzoj1055[haoi2008]玩具取名
题目链接一个人首先给一个玩具取名为WING中的一个字符,且W,I,N,G分别可以变成w,i,n,g种两个WING中的字符,给出玩具最终的名字,问最初的名字可以为那些字符定义dp[l][r][k]为[l,r]是否可以变成一种第k个字符```cppincludeincludeincludeusingname... 查看详情
bzoj1055[haoi2008]玩具取名
【bzoj1055】[HAOI2008]玩具取名2014年12月1日3,0111Description某人有一套玩具,并想法给玩具命名。首先他选择WING四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个... 查看详情
[bzoj1055][haoi2008]玩具取名(代码片段)
Description 某人有一套玩具,并想法给玩具命名。首先他选择WING四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得... 查看详情
bzoj1055[haoi2008]玩具取名
Description 某人有一套玩具,并想法给玩具命名。首先他选择WING四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得... 查看详情
bzoj1055:[haoi2008]玩具取名
Description 某人有一套玩具,并想法给玩具命名。首先他选择WING四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得... 查看详情
bzoj1055:[haoi2008]玩具取名
Description某人有一套玩具,并想法给玩具命名。首先他选择WING四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得很长... 查看详情
bzoj1055haoi2008玩具取名动态规划
题目大意:给定一个由‘W‘,‘I‘,‘N‘,‘G‘构成的字符串。给定一些规则。这些规则能够将两个字符合成为一个,比如"II"能够合成为‘W‘,"WW"能够合成为‘I‘或者‘N‘求这个字符串能够终于合成为哪几种字... 查看详情
玩具取名(代码片段)
区间dp思路挺好想的,不过实现......极其鬼畜令dp[i][j][k]表示i->j区间能否合为k,pan[b][c]表示b,c字母能合并为哪些字母。转移方程:[dp[l][r][a]=dp[l][r][a]|(dp[l][k][b]capdp[k+1][r][c])Kepsilon[l,r],pan[b][c]==a]code#include<iostream>#in 查看详情
[haoi2008]玩具取名-区间dp(代码片段)
某人有一套玩具,并想法给玩具命名。首先他选择WING四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得很长。现在,... 查看详情
[luogu4290haoi2008]玩具取名(dp)(代码片段)
传送门Solution裸区间DPCode#include<map>#include<cmath>#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>#defineF(i,a,b)for(regi 查看详情
题解玩具取名(代码片段)
Question题目大意不说了。区间(dp)设计(dp[i][j][k])表示区间([i,j])能不能由字符(k)变化得到那么有一个状态转移方程是:[dp[i][j][lay[l][0]]=dp[i][mid][lay[l][1]]>0,dp[mid+1][j][lay[l][2]]>0](lay)数组是存储的变化信息。(lay[l][1])表示的变化信息... 查看详情
动态规划刷题记录1(不定期更新~)
Dp刷(chao)题记录&题(fu)解(zhi)1.bzoj1055[HAOI2008]玩具取名题目大意:字典中有四个字母,’w’’i’’n’’g’,给出每个字母的转换关系,即某个单个字母可以转换为两个字母。给出一个文本,求最初的可... 查看详情