Submission #1332789

#TimeUsernameProblemLanguageResultExecution timeMemory
1332789chikien2009Copy and Paste 3 (JOI22_copypaste3)C++20
100 / 100
318 ms73832 KiB
#include <bits/stdc++.h>

using namespace std;

void setup()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
}

int n;
int z[2500], nxt[2500][2500];
string s;
long long a, b, c, d, e, num, last;
long long f[2500][2500];

int main()
{
    setup();

    cin >> n >> s >> a >> b >> c;
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
        {
            nxt[i][j] = -1;
            f[i][j] = a * (j - i + 1);
        }
    }
    for (int i = 0; i < n; ++i)
    {
        for (int j = i + 1, l = i, r = i, k = 1; j < n; ++j)
        {
            z[j - i] = (j <= r ? min(r - j + 1, z[j - l]) : 0);
            while (j + z[j - i] < n && s[j + z[j - i]] == s[i + z[j - i]])
            {
                z[j - i]++;
            }
            if (j + z[j - i] > r)
            {
                l = j;
                r = j + z[j - i] - 1;
            }
            while (k <= min(j - i, z[j - i]))
            {
                nxt[i][i + k - 1] = j;
                k++;
            }
        }
    }
    for (int len = 0; len < n; ++len)
    {
        for (int l = 0, r = len, cur_l, cur_r; r < n; ++l, ++r)
        {
            if (l < r)
            {
                f[l][r] = min(f[l][r], min(f[l + 1][r], f[l][r - 1]) + a);
            }
            cur_l = l;
            cur_r = r;
            num = 1;
            while (nxt[cur_l][cur_r] != -1)
            {
                cur_l = nxt[cur_l][cur_r];
                cur_r = cur_l + r - l;
                num++;
                f[l][cur_r] = min(f[l][cur_r], f[l][r] + b + c * num + a * (cur_r - l + 1 - num * (r - l + 1)));
            }
        }
    }
    cout << f[0][n - 1];
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...