CodeForces-191A Dynasty Puzzles

Posted on   Capterlliar  阅读(45)  评论(0编辑  收藏  举报

题单传送门

唉poj不知道什么时候能好,先上cf练着吧。

---------------正文---------------

王朝拼图,很好,很中二,我喜欢(

题意:按先后给出一些字符串,首尾相同的可以拼起来,排在后面的字符串只能接在前面的字符串之后,问最后首尾相同的字符串最长是多少。

解:一开始想的是dp[i]表示到第i个,首尾相同的字符串最长的长度。但这显然和新加的字符串关系不大。

正解:dp[i][j]表示以i开头j结尾的字符串最长长度,这样就很好转移啦。注意自己更新自己放在后面,不过样例提示了这一点,很良心了xxx

代码:

复制代码
#include<stdio.h>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stdlib.h>
#include <string>
using namespace std;
#define ll long long
#define maxx 500005
#define eps 0.00000001
#define inf 0x3f
//#define int long long
string a[maxx];
int dp[30][30]={0};
signed main() {
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    for(int i=0;i<n;i++){
        int len=a[i].length();
        int s=a[i][0]-'a';
        int e=a[i][len-1]-'a';
        for(int j=0;j<26;j++)
            if(dp[j][s])
                dp[j][e]=max(dp[j][e],dp[j][s]+len);
        dp[s][e]=max(dp[s][e],len);
    }
    int ans=0;
    for(int i=0;i<26;i++) {
        ans=max(ans,dp[i][i]);
    }
    cout<<ans<<endl;
    return 0;
}
View Code
复制代码

还有!!今天vj上交题弹出一长串绿的,仔细一看是HAPPY NEW YEAR! 我当时一整个惊喜,cf,真有你的。

 

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示