求助大佬,这个怎么写错了?
查看原帖
求助大佬,这个怎么写错了?
141577
yhc12345楼主2020/9/6 17:02
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#define INF 0x3f3f3f3f

using namespace std;
typedef long long ll;
int n;
const int N=30,M=1010;
char a[N][M];
int vis[N];
int ans,l[N];
inline int check(int x,int y) {
	int minl=min(l[x],l[y]);
	//printf("A");
	int res=-1;
	for(int i=1;i<=minl;i++) {
		bool flag=true;
		for(int j=l[x]-i,k=0;j<l[x]&&k<l[y]&&flag;j++,k++) {
			if(a[x][j]!=a[y][k]) {
				flag=false;
			}
		}
		if(flag) {
			res=i;
			break;
		}
	}
	if(res==minl&&x!=0&&y!=0) {
		return -1;
	}
	//printf("%d",res);
	return res;
}
void dfs(int k,int len) {
	ans=max(ans,len);
	for(int i=1;i<=n;i++) {
		if(vis[i]==2) {
			continue;
		}
		int x=check(k,i);
		if(x>-1) {
			vis[i]++;
			dfs(i,len+l[i]-x);
			vis[i]--;
		}
	}
}
int main() {
	scanf("%d",&n);
	for(int i=1;i<=n;i++) {
		scanf("%s",a[i]);
		l[i]=strlen(a[i]);
	}
	getchar();
	scanf("%c",&a[0][0]);
	l[0]=1;
	dfs(0,1);
	printf("%d",ans);
	return 0;
}

2020/9/6 17:02
加载中...