CodeForces 191A

CodeForces 191A

考虑 dp

dp[i][j] 表示 以i 为开头以 j 为结尾字符串能够满足条件的最大值。

因为要满足 a...b,c....d a == d && b == c 的条件。。

直接

        for (int j = 1; j <= 26; j++)
        {
            if (dp[j][st])
                dp[j][ed] = max(dp[j][ed], dp[j][st] + m);
        }
        dp[st][ed] = max(dp[st][ed], m);

枚举开头进行更新,或者枚举结尾的位置更新也行。。

int dp[100][100];
string s[N];
int main()
{
    int n;
    cin >> n;
    rep(i, n)
    {
        cin >> s[i];
    }
    rep(i, n)
    {
        int m = s[i].size();
        int st = s[i][0] - 'a' + 1;
        int ed = s[i][m - 1] - 'a' + 1;
        for (int j = 1; j <= 26; j++)
        {
            if (dp[j][st])
                dp[j][ed] = max(dp[j][ed], dp[j][st] + m);
        }
        dp[st][ed] = max(dp[st][ed], m);
    }
    int ans = 0;
    for (int i = 1; i <= 26; i++)
    {
        ans = max(ans, dp[i][i]);
    }
    cout << ans << endl;
    return 0;
}

posted @ 2020-04-02 23:14  strategist_614  阅读(96)  评论(0编辑  收藏  举报