제출 #716131

#제출 시각아이디문제언어결과실행 시간메모리
716131Darren0724Copy and Paste 3 (JOI22_copypaste3)C++17
62 / 100
876 ms98776 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=1e9+7,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++){ map<int,int> mp; vector<int> jump(n+1); 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=2; if(j>i){ mp[h[j-i][j-1]]=j-i; } jump[j]=mp[h[j][k]]; int j1=jump[j]; while(j1!=0){ dp[j1][k]=min(dp[j1][k],dp[j][k]+B+cnt*C+(k-j1+1-cnt*i)*A); cnt++; j1=jump[j1]; } } } cout<<dp[1][n]<<endl; 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...