如题,代码如下:
#include<bits/stdc++.h>
using namespace std;
const int maxv=65536+114;
int f[maxv][120];//考虑前 i 个词,用了 j 些词,以 k 结尾
string str[20];
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>str[i];
for(int i=1;i<=n;i++){
f[1<<i][str[i][str[i].size()-1]]=str[i].size();
for(int j=65537;j>=0;j--){
f[j]['A']=max(f[j]['A'],f[j]['A']);
f[j]['I']=max(f[j]['I'],f[j]['I']);
f[j]['O']=max(f[j]['O'],f[j]['O']);
f[j]['E']=max(f[j]['E'],f[j]['E']);
f[j]['U']=max(f[j]['U'],f[j]['U']);
for(int k=1;k<=n;k++){
if((j&(1<<k))){
f[j][str[k][str[k].size()-1]]=max(f[j][str[k][str[k].size()-1]],f[j-(1<<k)][str[k][0]]+(int)(str[k].size()));
}
}
}
}
int ans=0;
for(int i=0;i<=65537;i++){
ans=max(ans,max(f[i]['A'],max(f[i]['I'],max(f[i]['U'],max(f[i]['E'],f[i]['O'])))));
}
cout<<ans;
}
//000001000000
//111111111111