DP求助,疑似数据有锅
查看原帖
DP求助,疑似数据有锅
236099
H_D_NULL楼主2020/9/24 19:29

在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;
}
2020/9/24 19:29
加载中...