Submission #680902

# Submission time Handle Problem Language Result Execution time Memory
680902 2023-01-12T02:09:34 Z DennisTran Visiting Singapore (NOI20_visitingsingapore) C++17
10 / 100
196 ms 196684 KB
#pragma GCC optimize("O2")
#pragma GCC target("avx,avx2,fma")
#include <bits/stdc++.h>
#define FOR(i, a, b) for (int i = (a); i <= (b); i++)
#define FOD(i, a, b) for (int i = (a); i >= (b); i--)
#define REP(i, n) for (int i = 0; i < (n); i++)
#define ALL(x) (x).begin(), (x).end()
#define TIME  (1.0 * clock() / CLOCKS_PER_SEC)
#define file(name)  if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
#define int long long
using namespace std;

const int MAXN = 5005;
const long long INF = 0x3f3f3f3f3f3f3f3f;

int K, N, M, v[MAXN], s[MAXN], t[MAXN];
long long dp[MAXN], Max[MAXN][MAXN], Ord[MAXN], prv[MAXN];
long long A, B;

signed main(void) {
    ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
    //file("TASK");
    cin >> K >> N >> M >> A >> B;
    FOR(i, 1, K) cin >> v[i];
    FOR(i, 1, N) cin >> s[i];
    FOR(i, 1, M) cin >> t[i];

    memset(dp, -INF, sizeof dp);
    memset(Max, -INF, sizeof Max);
    memset(Ord, -INF, sizeof Ord);
    dp[0] = 0;
    long long ans = -INF;
    FOR(i, 1, N) {
        FOR(j, 0, M) prv[j] = dp[j];
        FOR(j, 0, M) dp[j] = -INF;
        long long cur = -INF;
        FOR(j, 1, M) {
            if (s[i] == t[j]) {
                dp[j] = prv[j - 1] + v[t[j]];
                if (i >= 2 && j >= 2)
                    dp[j] = max(dp[j], Max[i - 2][j - 2] + v[t[j]] + B * (i + j) + 2 * (A - B));
                if (j >= 2)
                    dp[j] = max(dp[j], cur + v[t[j]] + B * j + A - B);
                if (i >= 2)
                    dp[j] = max(dp[j], Ord[j - 1] + v[t[j]] + B * i + A - B);
                 dp[j] = max(dp[j], v[t[j]] + (j > 1) * A + (j - 1) * B);
            }

            Max[i][j] = dp[j] - B *(i + j);
            Max[i][j] = max(Max[i][j], Max[i - 1][j]);
            Max[i][j] = max(Max[i][j], Max[i][j - 1]);
            if (j >= 1) cur = max(cur, prv[j - 1] - (j - 1) * B);
            //Ord[i][j] = dp[i][j] - i * B;
            //Ord[i][j] = max(Ord[i][j], Ord[i - 1][j]);
            if (dp[j] != -INF)
                ans = max(ans, dp[j] + (M > j) * A + (M - j) * B);
        }
        if (i >= 1) {
            FOR(j, 1, M) {
                Ord[j] = max(Ord[j], prv[j] - (i - 1) * B);
            }
        }

    }
    //FOR(i, 1, N) FOR(j, 1, M) cout << dp[i][j] << " \n" [j == M];
    cout << ans;
    cerr << "Time elapsed: " << TIME << " s.\n";
    return (0 ^ 0);
}

Compilation message

VisitingSingapore.cpp: In function 'int main()':
VisitingSingapore.cpp:28:16: warning: overflow in conversion from 'long long int' to 'int' changes value from '-4557430888798830399' to '-1061109567' [-Woverflow]
   28 |     memset(dp, -INF, sizeof dp);
      |                ^~~~
VisitingSingapore.cpp:29:17: warning: overflow in conversion from 'long long int' to 'int' changes value from '-4557430888798830399' to '-1061109567' [-Woverflow]
   29 |     memset(Max, -INF, sizeof Max);
      |                 ^~~~
VisitingSingapore.cpp:30:17: warning: overflow in conversion from 'long long int' to 'int' changes value from '-4557430888798830399' to '-1061109567' [-Woverflow]
   30 |     memset(Ord, -INF, sizeof Ord);
      |                 ^~~~
# Verdict Execution time Memory Grader output
1 Correct 70 ms 196428 KB Output is correct
2 Correct 89 ms 196388 KB Output is correct
3 Correct 72 ms 196416 KB Output is correct
4 Correct 71 ms 196480 KB Output is correct
5 Correct 70 ms 196440 KB Output is correct
6 Correct 84 ms 196384 KB Output is correct
7 Correct 71 ms 196460 KB Output is correct
8 Correct 70 ms 196476 KB Output is correct
9 Correct 78 ms 196480 KB Output is correct
10 Correct 84 ms 196412 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 73 ms 196484 KB Output is correct
2 Correct 71 ms 196428 KB Output is correct
3 Correct 72 ms 196444 KB Output is correct
4 Correct 71 ms 196448 KB Output is correct
5 Correct 72 ms 196480 KB Output is correct
6 Correct 74 ms 196432 KB Output is correct
7 Correct 81 ms 196496 KB Output is correct
8 Correct 77 ms 196448 KB Output is correct
9 Correct 71 ms 196428 KB Output is correct
10 Correct 83 ms 196508 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 84 ms 196424 KB Output is correct
2 Correct 82 ms 196508 KB Output is correct
3 Correct 112 ms 196544 KB Output is correct
4 Correct 173 ms 196600 KB Output is correct
5 Correct 101 ms 196444 KB Output is correct
6 Correct 115 ms 196684 KB Output is correct
7 Correct 147 ms 196576 KB Output is correct
8 Correct 112 ms 196436 KB Output is correct
9 Correct 120 ms 196568 KB Output is correct
10 Correct 196 ms 196596 KB Output is correct
11 Correct 193 ms 196560 KB Output is correct
12 Correct 188 ms 196596 KB Output is correct
13 Incorrect 195 ms 196592 KB Output isn't correct
14 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 84 ms 196424 KB Output is correct
2 Correct 82 ms 196508 KB Output is correct
3 Correct 112 ms 196544 KB Output is correct
4 Correct 173 ms 196600 KB Output is correct
5 Correct 101 ms 196444 KB Output is correct
6 Correct 115 ms 196684 KB Output is correct
7 Correct 147 ms 196576 KB Output is correct
8 Correct 112 ms 196436 KB Output is correct
9 Correct 120 ms 196568 KB Output is correct
10 Correct 196 ms 196596 KB Output is correct
11 Correct 193 ms 196560 KB Output is correct
12 Correct 188 ms 196596 KB Output is correct
13 Incorrect 195 ms 196592 KB Output isn't correct
14 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 84 ms 196424 KB Output is correct
2 Correct 82 ms 196508 KB Output is correct
3 Correct 112 ms 196544 KB Output is correct
4 Correct 173 ms 196600 KB Output is correct
5 Correct 101 ms 196444 KB Output is correct
6 Correct 115 ms 196684 KB Output is correct
7 Correct 147 ms 196576 KB Output is correct
8 Correct 112 ms 196436 KB Output is correct
9 Correct 120 ms 196568 KB Output is correct
10 Correct 196 ms 196596 KB Output is correct
11 Correct 193 ms 196560 KB Output is correct
12 Correct 188 ms 196596 KB Output is correct
13 Incorrect 195 ms 196592 KB Output isn't correct
14 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 73 ms 196376 KB Output is correct
2 Correct 80 ms 196456 KB Output is correct
3 Correct 71 ms 196456 KB Output is correct
4 Correct 71 ms 196452 KB Output is correct
5 Correct 71 ms 196460 KB Output is correct
6 Correct 72 ms 196396 KB Output is correct
7 Correct 74 ms 196428 KB Output is correct
8 Correct 72 ms 196468 KB Output is correct
9 Correct 73 ms 196428 KB Output is correct
10 Correct 71 ms 196372 KB Output is correct
11 Correct 82 ms 196420 KB Output is correct
12 Correct 72 ms 196460 KB Output is correct
13 Incorrect 71 ms 196456 KB Output isn't correct
14 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 70 ms 196428 KB Output is correct
2 Correct 89 ms 196388 KB Output is correct
3 Correct 72 ms 196416 KB Output is correct
4 Correct 71 ms 196480 KB Output is correct
5 Correct 70 ms 196440 KB Output is correct
6 Correct 84 ms 196384 KB Output is correct
7 Correct 71 ms 196460 KB Output is correct
8 Correct 70 ms 196476 KB Output is correct
9 Correct 78 ms 196480 KB Output is correct
10 Correct 84 ms 196412 KB Output is correct
11 Correct 73 ms 196484 KB Output is correct
12 Correct 71 ms 196428 KB Output is correct
13 Correct 72 ms 196444 KB Output is correct
14 Correct 71 ms 196448 KB Output is correct
15 Correct 72 ms 196480 KB Output is correct
16 Correct 74 ms 196432 KB Output is correct
17 Correct 81 ms 196496 KB Output is correct
18 Correct 77 ms 196448 KB Output is correct
19 Correct 71 ms 196428 KB Output is correct
20 Correct 83 ms 196508 KB Output is correct
21 Correct 84 ms 196424 KB Output is correct
22 Correct 82 ms 196508 KB Output is correct
23 Correct 112 ms 196544 KB Output is correct
24 Correct 173 ms 196600 KB Output is correct
25 Correct 101 ms 196444 KB Output is correct
26 Correct 115 ms 196684 KB Output is correct
27 Correct 147 ms 196576 KB Output is correct
28 Correct 112 ms 196436 KB Output is correct
29 Correct 120 ms 196568 KB Output is correct
30 Correct 196 ms 196596 KB Output is correct
31 Correct 193 ms 196560 KB Output is correct
32 Correct 188 ms 196596 KB Output is correct
33 Incorrect 195 ms 196592 KB Output isn't correct
34 Halted 0 ms 0 KB -