这样能过么?
查看原帖
这样能过么?
160449
wzy080117楼主2021/1/3 15:48
#include<iostream>
#include<string>
#include<memory.h>
#include<fstream>
using namespace std;
const int MAXN=21;
int a[MAXN][MAXN],b[MAXN][MAXN],d[MAXN];
int m,n,ans=0;
string w[MAXN];
char c;
void findadj()
{
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));
	for(int i=1;i<=n;++i)
	  for(int j=1;j<=n;++j) 
	   {
		  int l1=w[i].length(),l2=w[j].length();
		  int k=0;
		  while(k<l1-1&&k<l2-1){
			    k++;
			    if(w[i].substr(l1-k,k)==w[j].substr(0,k)){
					  a[i][j]=1;
			          b[i][j]=k;
			          break;		
					}
			  }
		   }
	}
void search(int i,int len)
{
	if(ans<len)ans=len;
	for(int j=1;j<=n;++j)
	  if (a[i][j]>0&&d[j]){
		                    d[j]--;
		                    search(j,len+w[j].length()-b[i][j]);
		                    d[j]++;
		                   }
	}
int main()
{
   cin>>n;
   for(int i=1;i<=n;++i) cin>>w[i];
   cin>>c;
   findadj();
   for(int i=1;i<=n;++i)
	   if(w[i][0]==c){
		                       for(int j=1;j<=n;j++)d[j]=2;
		                       d[i]--;
							   search(i,w[i].length());
	                        }
   cout<<ans<<endl;
   return 0;
 }

2021/1/3 15:48
加载中...