| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1332393 | chikien2009 | Copy and Paste 3 (JOI22_copypaste3) | C++20 | 48 ms | 63388 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 kmp[2500];
string s;
long long a, b, c, d, e, num, last;
long long f[200][200][200], g[200][200];
int main()
{
setup();
cin >> n >> s >> a >> b >> c;
for (int i = 0; i < n; ++i)
{
for (int j = i; j < n; ++j)
{
fill_n(f[i][j], 200, -1);
}
}
for (int i = 0; i < n; ++i)
{
for (int j = i; j < n; ++j)
{
for (int k = i + 1; k < n; ++k)
{
kmp[k - i] = kmp[k - i - 1] * (k != j + 1);
while (kmp[k - i] > j - i || (kmp[k - i] > 0 && s[i + kmp[k - i]] != s[k]))
{
kmp[k - i] = kmp[kmp[k - i] - 1];
}
kmp[k - i] += (s[k] == s[i + kmp[k - i]]);
}
num = 1;
last = j;
for (int k = j + 1; k < n; ++k)
{
if (kmp[k - i] == j - i + 1 && last + j - i + 1 <= k)
{
last = k;
num++;
}
d = k - i + 1 - num * (j - i + 1);
f[i][k][j] = a * d + num * c + b;
}
}
}
for (int i = 0; i < n; ++i)
{
for (int l = 0, r = i; r < n; ++l, ++r)
{
g[l][r] = a * (r - l + 1);
for (int k = 0; k < n; ++k)
{
if (f[l][r][k] != -1)
{
g[l][r] = min(g[l][r], g[l][k] + f[l][r][k]);
}
}
if (l < r)
{
g[l][r] = min(g[l][r], min(g[l][r - 1], g[l + 1][r]) + a);
}
}
}
cout << g[0][n - 1];
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
