Submission #567715

#TimeUsernameProblemLanguageResultExecution timeMemory
567715maomao90Copy and Paste 3 (JOI22_copypaste3)C++17
25 / 100
3095 ms3088 KiB
#include <bits/stdc++.h> using namespace std; #define REP(i, j, k) for (int i = j; i < k; i++) #define RREP(i, j, k) for (int i = j; i >= k; i--) template <class T> bool mnto(T &a, const T b) {return a > b ? a = b, 1 : 0;} template <class T> bool mxto(T &a, const T b) {return a < b ? a = b, 1 : 0;} typedef long long ll; #define FI first #define SE second typedef pair<int, int> ii; typedef pair<ll, ll> pll; #define ALL(x) x.begin(), x.end() #define SZ(x) (int) x.size() #define pb push_back typedef vector<int> vi; typedef vector<ii> vii; typedef vector<ll> vll; #ifndef DEBUG #define cerr if(0) cerr #endif const int MAXN = 2505; const int INF = 1000000005; const ll LINF = 1000000000000000005; int n; string s; int a, b, c; ll dp[MAXN][MAXN]; int main() { #ifndef DEBUG ios::sync_with_stdio(0), cin.tie(0); #endif cin >> n; cin >> s; cin >> a >> b >> c; RREP (i, n - 1, 0) { REP (j, i, n) { dp[i][j] = dp[i + 1][j] + a; REP (k, i, j) { ll cost = dp[i][k] + b; int len = k - i + 1; REP (l, i, j + 1) { bool pos = 1; if (l + len - 1 <= j) { REP (m, 0, len) { if (s[i + m] != s[l + m]) { pos = 0; break; } } } else { pos = 0; } if (pos) { l += len - 1; cost += c; } else { cost += a; } } mnto(dp[i][j], cost); } cerr << i << ' ' << j << ": " << dp[i][j] << '\n'; } } cout << dp[0][n - 1] << '\n'; 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...