# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
770341 | Amylopectin | Copy and Paste 3 (JOI22_copypaste3) | C++14 | 3 ms | 320 KiB |
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 <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
const long long mxn = 3e3 + 10;
// const long long mxn = 20;
char s[mxn] = {};
long long c1,c2,c3,u[mxn] = {},rev[mxn] = {},dp[mxn][mxn] = {};
long long re(long long cl,long long cr)
{
if(dp[cl][cr] != 0)
{
return dp[cl][cr];
}
long long i,j,k,o,n = cr - cl + 1,cn,cm,cou,cma = 1,fmi = -1,cmi;
// for(i=cl; i<=cr; i++)
// {
// u[i] = 0;
// }
fmi = c1 * n;
for(i=n/2; i>0; i--)
{
cma = 1;
cou = n/i;
cmi = re(0,i-1) + c2 + cou * c3 + c1 * (n-cou*i);
if(fmi > cmi)
{
fmi = cmi;
}
// for(j=cl; j<=cl+n - i*2; j++)
// {
// if(u[j] != i)
// {
// cou = 0;
// cn = j;
// rev[j] = j;
// for(k=j+1; k<j+i; k++)
// {
// while(1)
// {
// if(s[k] == s[cn])
// {
// rev[k] = cn+1;
// cn++;
// break;
// }
// if(cn == j)
// {
// rev[k] = j;
// break;
// }
// cn = rev[cn-1];
// }
// }
// cn = j+i-1;
// for(k=j+i-1; k<=cr; k++)
// {
// while(1)
// {
// if(s[k] == s[cn])
// {
// cn++;
// break;
// }
// if(cn == j)
// {
// break;
// }
// cn = rev[cn-1];
// }
// if(cn == j+i)
// {
// u[k-i+1] = i;
// cn = rev[cn-1];
// }
// }
// cn = j+i-1;
// for(k=j+i-1; k<=cr; k++)
// {
// while(1)
// {
// if(s[k] == s[cn])
// {
// cn++;
// break;
// }
// if(cn == j)
// {
// break;
// }
// cn = rev[cn-1];
// }
// if(cn == j+i)
// {
// cou ++;
// cn = j;
// if(cr-k < i)
// break;
// }
// }
// // if(fmi == -1)
// // {
// // fmi = re(j,j+i-1) + c2 + cou * c3 + c1 * (n-cou*i);
// // }
// // else
// // {
// cmi = re(j,j+i-1) + c2 + cou * c3 + c1 * (n-cou*i);
// if(fmi > cmi)
// {
// fmi = cmi;
// }
// // }
// // if(cou > cma)
// // {
// // cma = cou;
// // }
// }
// }
}
dp[cl][cr] = fmi;
return fmi;
}
int main()
{
long long i,j,m,n;
scanf("%lld %s %lld %lld %lld",&n,&s,&c1,&c2,&c3);
re(0,n-1);
printf("%lld",dp[0][n-1]);
return 0;
}
Compilation message (stderr)
# | 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... |