#include<bits/stdc++.h> using namespace std; const int maxn = 1e6 + 10; int dp[26][26], n; char str[maxn]; void update() { int e1 = str[0] - &(3315)#39;a'; int e2 = str[strlen(str)-1] - &(3316)#39;a'; int len = strlen(str); for(int i = 0;i <= e1;i++) for(int j = 25;j >= e2;j--) { if(e1 == e2 && dp[e1][e2] > 0) // 插入 dp[i][j] = dp[i][j] + len; else // 拼接 dp[i][j] = max(dp[i][j], dp[i][e1] + len + dp[e2][j]); } } int main() { scanf("%d", &n); for(int i = 0;i < n;i++) { scanf("%s", str); update(); } printf("%d\n", dp[0][25]); } 时间复杂度O(n)
点赞 评论

相关推荐

点赞 评论 收藏
分享
牛客网
牛客企业服务