在P2581可过的代码,在这里却WA(输入方式已改过)
有可能是数据的锅,也有可能是我没有理解清题意,反正代码先贴上
P.S. 唯一的一篇题解也过不了
#include<bits/stdc++.h>
#define re register
using namespace std;
int n;
int f[105];
int h[30][105][105];
char l[5],md[105];
struct R{
char frt;
char end;
};
vector <R> t[30];
inline bool dfs(char c,int l,int r){
if(h[c-'A'][l][r]!=-1) return h[c-'A'][l][r];
if(l==r) return h[c-'A'][l][r]=(c==md[l]);
for(re int i=l;i<r;i++){
for(re auto k:t[c-'A']){
if(dfs(k.frt,l,i)&&dfs(k.end,i+1,r)){
return h[c-'A'][l][r]=1;
}
}
}
return h[c-'A'][l][r]=0;
}
int main(){
scanf("%d",&n);
while(n--){
scanf("%s",l);
t[l[0]-'A'].push_back(R{l[1],l[2]});
}
n=1;
// scanf("%d",&n);
while(n--){
scanf("%s",md+1);
re int len=strlen(md+1);
memset(h,-1,sizeof(h));
memset(f,63,sizeof(f));
f[0]=0;
for(re int i=1;i<=len;i++){
for(re int j=0;j<i;j++){
if(f[j]+1<f[i]&&dfs('S',j+1,i)){
f[i]=f[j]+1;
}
}
}
if(f[len]>len) puts("NIE");
else printf("%d\n",f[len]);
}
return 0;
}