傳送門
$dp$
設 $f[i][j][k]$ 表示初始為 $k$ 時,能否得到 $[i,j]$ 這一段子串
設 $pd[i][j][k]$ 表示長度為二的字串 $ij$ 能否由 $k$ 得到
然後列舉左右區間轉移:有
$f[i][j][k]=[f[i][p][x]=1]\ and\ [f[p+1][j][y]=1]\ and\ [pd[x][y][k]=1]$
邊界 $f[i][i][k]=[a[i]=k]$
然後直接記憶化搜尋
#include#include#include
#include
#include
using
namespace
std;
typedef
long
long
ll;inline
intread()
while(ch>='
0'&&ch<='
9')
return x*f;
}int n[7],a[207
],m;
int pd[7][7][7
];char s[207
];bool f[207][207][7],vis[207][207][7
];inline
int f(char
s)inline
char df(int
x)bool dfs(int l,int r,int
x)
returnt;}
intmain()
scanf("%s
",s+1); m=strlen(s+1
);
for(int i=1;i<=m;i++) a[i]=f(s[i]);
bool flag=0
;
for(int i=1;i<=4;i++)
if(dfs(1,m,i)) printf("
%c",df(i)),flag=1
;
if(!flag) printf("
the name is wrong!");
printf("\n
");return0;
}
P4289 HAOI2008 移動玩具
在乙個4 4的方框內擺放了若干個相同的玩具,某人想將這些玩具重新擺放成為他心中理想的狀態,規定移動時只能將玩具向上下左右四個方向移動,並且移動的位置不能有玩具,請你用最少的移動次數將初始的玩具狀態移動到某人心中的目標狀態。輸入格式 前4行表示玩具的初始狀態,每行4個數字1或0,1表示方格中放置了玩具...
P4289 HAOI2008 移動玩具
在乙個 4 times 4 的方框內擺放了若干個相同的玩具,某人想將這些玩具重新擺放成為他心中理想的狀態,規定移動時只能將玩具向上下左右四個方向移動,並且移動的位置不能有玩具,請你用最少的移動次數將初始的玩具狀態移動到某人心中的目標狀態。標籤是hash,可是我不會。我們看,棋盤大小就 4 times...
移動玩具 HAOI2008
在乙個4 4的方框內擺放了若干個相同的玩具,某人想將這些玩具重新擺放成為他心中理想的狀態,規定移動時只能將玩具向上下左右四個方向移動,並且移動的位置不能有玩具,請你用最少的移動次數將初始的玩具狀態移 動到某人心中的目標狀態。前4行表示玩具的初始狀態,每行4個數字1或0,1表示方格中放置了玩具,0表示...