一道比较水的dp,但是还是想了很久,最后参考了一下大牛的代码才想出解法的,不是很难懂。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int dp[26][26];
int max(int a,int b) { return a>b?a:b; }
int main(){
int n,a,b,i,j,l,ans=0;
char s[15];
scanf("%d",&n);
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++){
scanf("%s",s);
l=strlen(s);
a=s[0]-'a'; b=s[l-1]-'a';
for(j=0;j<26;j++){
if(dp[j][a])
dp[j][b]=max(dp[j][b],dp[j][a]+l);
}
dp[a][b]=max(dp[a][b],l);
}
for(i=0;i<26;i++)
ans=max(ans,dp[i][i]);
printf("%d\n",ans);
return 0;
}