Submission #716092

#TimeUsernameProblemLanguageResultExecution timeMemory
716092Darren0724Copy and Paste 3 (JOI22_copypaste3)C++17
62 / 100
3064 ms98644 KiB
#pragma GCC optimize("Ofast","O3","unroll-loops") #pragma GCC target("avx2") #include<bits/stdc++.h> using namespace std; #define int long long #define all(x) x.begin(),x.end() #define x first #define y second #define endl '\n' const int K=29,mod=1234567891,INF=1e18; signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n;cin>>n; vector<char> v(n+1); for(int i=1;i<=n;i++){ cin>>v[i]; } int A,B,C;cin>>A>>B>>C; vector<vector<int>> h(n+2,vector<int>(n+2)); for(int i=1;i<=n;i++){ for(int j=i;j<=n;j++){ h[i][j]=h[i][j-1]*K+v[j]-'a'+1; h[i][j]%=mod; } } vector<vector<int>> dp(n+2,vector<int>(n+2,INF)); for(int i=1;i<=n;i++){ dp[i][i]=A; } for(int i=1;i<=n;i++){ for(int j=1;j+i-1<=n;j++){ int k=j+i-1; dp[j][k]=min({dp[j+1][k]+A,dp[j][k-1]+A,dp[j][k]}); int cnt=1,cnt1=0; int j1=k+1; while(j1<=n){ if(j1+i-1<=n&&h[j][k]==h[j1][j1+i-1]){ cnt++; dp[j][j1+i-1]=min(dp[j][j1+i-1],dp[j][k]+A*cnt1+B+C*cnt); j1=j1+i; } else{ cnt1++; j1++; } } } } /*for(int i=1;i<=n;i++){ for(int j=i;j<=n;j++){ cout<<dp[i][j]<<' '; } cout<<endl; }*/ cout<<dp[1][n]<<endl; return 0; } /* 10 20 30 40 50 49 59 51 59 69 79 10 20 30 40 39 49 41 49 59 69 10 20 30 29 39 31 41 49 59 10 20 30 40 39 49 49 59 10 20 30 40 39 49 59 10 20 30 29 39 49 10 20 30 40 50 10 20 30 40 10 20 30 10 20 10 */
#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...