秋祭 | 静岡高校工学部



卬高杯


提出詳細

提出id提出時刻ユーザー名問題言語判定状況判定実行時間
1148782023-10-24 09:42:59rk42745417Hcpp19/19AC403

#include <iostream>
#include <string>
#include <vector>

signed main() {
    int n;
    std::cin >> n;
    std::vector<std::string> arr(n);
    for (auto &a : arr)
        std::cin >> a;

    std::vector<std::vector<int>> edge(n);
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            if (i != j && arr[i].back() == arr[j].front())
                edge[i].push_back(j);
    std::vector dp(1 << n, std::vector(n, 0));
    for (int i = 0; i < n; i++)
        dp[1 << i][i] = arr[i].size();
    for (int i = 0; i < (1 << n); i++)
        for (int j = 0; j < n; j++)
            for (int k : edge[j])
                if ((~i >> k & 1))
                    dp[i | (1 << k)][k] = std::max<int>(dp[i | (1 << k)][k], dp[i][j] + arr[k].size());
    int ans = 0;
    for (int i = 0; i < (1 << n); i++)
        for (int j = 0; j < n; j++)
            ans = std::max(ans, dp[i][j]);
    std::cout << ans << '\n';
}

sample1.txt AC 2
sample2.txt AC 2
sample3.txt AC 3
case1.txt AC 126
case2.txt AC 122
case3.txt AC 134
case4.txt AC 141
case5.txt AC 104
case6.txt AC 372
case7.txt AC 371
case8.txt AC 2
case9.txt AC 5
case10.txt AC 6
case11.txt AC 7
case12.txt AC 7
case13.txt AC 11
case14.txt AC 7
case15.txt AC 8
case16.txt AC 403
403 AC403 AC