이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 2500;
long long dp[MAX_N][MAX_N];
int main() {
int n, a, b, c;
string s;
cin >> n >> s >> a >> b >> c;
for ( int i = 0; i < n; i++ )
dp[i][i] = a;
for ( int len = 2; len <= n; len++ ) {
for ( int l = 0; l <= n - len; l++ ) {
int r = l + len - 1;
dp[l][r] = min( dp[l + 1][r], dp[l][r - 1] ) + a;
for ( int d = 1; d * d <= len; d++ ) {
if ( len % d == 0 ) {
bool ok;
ok = true;
for ( int i = l; i <= r - d; i++ )
ok &= (s[i] == s[i + d]);
if ( ok )
dp[l][r] = min( dp[l][r], dp[l][l + d - 1] + b + (len / d) * c );
d = len / d;
ok = true;
for ( int i = l; i <= r - d; i++ )
ok &= (s[i] == s[i + d]);
if ( ok )
dp[l][r] = min( dp[l][r], dp[l][l + d - 1] + b + (len / d) * c );
d = len / d;
}
}
//printf( "%d %d %lld\n", l, r, dp[l][r] );
}
}
cout << dp[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... |