Submission #224552

#TimeUsernameProblemLanguageResultExecution timeMemory
224552NightlightVisiting Singapore (NOI20_visitingsingapore)C++14
100 / 100
181 ms768 KiB
#include <bits/stdc++.h> using namespace std; const int mn = -2e9; int K, M, N, A, B; int V[1005], S[5005], T[5005]; int dp[5][5005][5]; int main() { // freopen("inp", "r", stdin); scanf("%d %d %d %d %d", &K, &N, &M, &A, &B); for(int i = 1; i <= K; i++) scanf("%d", &V[i]); for(int i = 1; i <= N; i++) scanf("%d", &S[i]); for(int i = 1; i <= M; i++) scanf("%d", &T[i]); for(int i = 0; i <= M; i++) { for(int j = 1; j <= 4; j++) { dp[0][i][j] = mn; } } //kalau ga terbang int ans = A + M * B; for(int i = 1; i <= N; i++) { int now = i % 2, bef = !now; for(int k = 1; k <= 4; k++) dp[now][0][k] = mn; for(int j = 1; j <= M; j++) { if(S[i] == T[j]) { int opt = (j == 1 ? 0 : (A + (j - 1) * B)); for(int k = 1; k <= 4; k++) { opt = max(opt, dp[bef][j - 1][k]); } dp[now][j][4] = opt + V[S[i]]; }else { dp[now][j][4] = mn; } //jika ga ambil T[j - 1] sebelumnya dp[now][j][2] = max(dp[now][j - 1][2] + B, dp[now][j - 1][4] + A + B); //jika ga ambil S[i - 1] sebelumnya dp[now][j][3] = max(dp[bef][j][3] + B, dp[bef][j][4] + A + B); //jika ga keduanya dp[now][j][1] = max(dp[now][j - 1][3] + A + B, max(dp[now][j - 1][1] + B, 2*A + (j + 1)*B)); } for(int k = 1; k <= 4; k++) { // cout << i << " " << k << " " << dp[now][M][k] << "\n"; ans = max(ans, dp[now][M][k]); } } printf("%d\n", ans); }

Compilation message (stderr)

VisitingSingapore.cpp: In function 'int main()':
VisitingSingapore.cpp:12:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d %d %d %d", &K, &N, &M, &A, &B);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
VisitingSingapore.cpp:13:36: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   for(int i = 1; i <= K; i++) scanf("%d", &V[i]);
                               ~~~~~^~~~~~~~~~~~~
VisitingSingapore.cpp:14:36: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   for(int i = 1; i <= N; i++) scanf("%d", &S[i]);
                               ~~~~~^~~~~~~~~~~~~
VisitingSingapore.cpp:15:36: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   for(int i = 1; i <= M; i++) scanf("%d", &T[i]);
                               ~~~~~^~~~~~~~~~~~~
#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...