Submission #883173

#TimeUsernameProblemLanguageResultExecution timeMemory
883173LucaIlieCopy and Paste 3 (JOI22_copypaste3)C++17
1 / 100
3079 ms37916 KiB
#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][r - 1], dp[l + 1][r] ) + 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 + (long long)c * (len / d) ); 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 + (long long)c * (len / d) ); d = len / d; } } } } long long ans = LONG_LONG_MAX; for ( int l = 0; l < n; l++ ) { for ( int r = l; r < n; r++ ) ans = min( ans, dp[l][r] + (long long)a * (n - (r - l + 1)) ); } cout << ans; 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...