제출 #337374

#제출 시각아이디문제언어결과실행 시간메모리
337374iulia13Visiting Singapore (NOI20_visitingsingapore)C++14
23 / 100
318 ms262148 KiB
#include <iostream> using namespace std; int v[1005]; int s[5005]; int t[5005]; int dp[5005][5005][2][2]; void maxi (int &a, int b) { a = max(a, b); } int main() { int k, n, m, a, b, j, i, ans = 0; cin >> k >> n >> m >> a >> b; ans = a + m * b; for (i = 1; i <= k; i++) cin >> v[i]; for (i = 1; i <= n; i++) cin >> s[i]; for (i = 1; i <= m; i++) cin >> t[i]; for (j = 1; j <= m; j++) for (int st1 = 0; st1 < 2; st1++) for (int st2 = 0; st2 < 2; st2++) dp[0][j][st1][st2] = -2e9; for (i = 1; i <= n; i++) for (int st1 = 0; st1 < 2; st1++) for (int st2 = 0; st2 < 2; st2++) dp[i][0][st1][st2] = -2e9; for (i = 1; i <= n; i++) for (j = 1; j <= m; j++) for (int st1 = 0; st1 < 2; st1++) for (int st2 = 0; st2 < 2; st2++) { if (st1 && st2) { if (s[i] == t[j]) { int var = - 2e9; maxi(var, dp[i - 1][j - 1][0][0] + v[s[i]]); maxi(var, dp[i - 1][j - 1][0][1] + v[s[i]]); maxi(var, dp[i - 1][j - 1][1][0] + v[s[i]]); maxi(var, dp[i - 1][j - 1][1][1] + v[s[i]]); if (j == 1) maxi(var, v[s[i]]); else maxi(var, a + b * (j - 1) + v[s[i]]); dp[i][j][st1][st2] = var; } else dp[i][j][st1][st2] = -2e9; } else if (st2) dp[i][j][st1][st2] = max(dp[i - 1][j][0][1] + b, dp[i - 1][j][1][1] + a + b); else if (st1) dp[i][j][st1][st2] = max(dp[i][j - 1][1][0] + b, dp[i][j - 1][1][1] + a + b); else dp[i][j][st1][st2] = max(dp[i][j - 1][0][0] + b, dp[i][j - 1][0][1] + a + b); if (j == m) maxi(ans, dp[i][j][st1][st2]); } cout << ans; 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...
#Verdict Execution timeMemoryGrader output
Fetching results...