代码是这个,只过了百分之七
#include <bits/stdc++.h>
using namespace std;
int n,m,imin;
string a[100004];
int b[100004];
int find(string s,string t){
int ls=s.length(),lt=t.length(),ll=0;
for(int i=0;i<min(ls,lt);i++){
if(s[i]==t[i]) ll++;
else break;
}
return ll;
}
void dfs(int x,int tip,int sum){
if(sum>=imin) return;
if(tip==n){
imin=min(imin,sum);
return;
}
for(int i = 0 ; i < n ; i ++ ){
if(b[i]) continue;
m=a[x].length()+a[i].length()-2*find(a[x],a[i]);
if(sum+m<imin) {
b[i]=1;
dfs(i,tip+1,sum+m);
b[i]=0;
}
}
}
int main(){
cin>>n>>m;
imin=100000;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
b[i]=0;
}
cin>>m;
cin>>m;
for(int i=0;i<n;i++){
b[i]=1;
m=a[i].length();
dfs(i,1,m);
b[i]=0;
}
cout<<imin<<endl;
}
全部评论
(0) 回帖