This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
const int nax = 203;
const long long INF = 1e18;
int n;
string s;
long long A, B, C;
long long dp[nax][nax];
long long solve(int i, int j) {
long long &ret = dp[i][j];
if(ret!=-1) return ret;
if(i==j) return A;
ret = min((j-i+1) * A, solve(i+1, j) + A);
for(int k=1; k<j-i+1; ++k) {
int cnt = 0;
int p = i;
while(p+k-1<=j) {
if(s.substr(i, k)==s.substr(p, k)) {
++cnt;
p += k;
} else ++p;
}
long long cur = solve(i, i+k-1) + B;
cur += cnt * C;
cur += ((j-i+1) - cnt * k) * A;
ret = min(ret, cur);
}
return ret;
}
void PlayGround() {
cin>>n>>s>>A>>B>>C;
memset(dp, -1, sizeof dp);
s = '@' + s;
cout<<solve(1, n)<<'\n';
// cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
PlayGround();
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... |