252202026-02-18 14:23:53AblablablaSzámsorjáték (40 pont)cpp17Time limit exceeded 14/401.1s1076 KiB
#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> pii;

int n, m, k;
vector<int> a, b;
vector<int> sufA, sufB;
vector<vector<int>> dp;

int megold(int egy, int ket){
    if(egy == n && ket == m){
        return 0;
    }
    int marad = sufA[egy] + sufB[ket];

    if(dp[egy][ket] != -1){
        return dp[egy][ket];
    }
    if(egy == n){
        return dp[egy][ket] = marad - megold(egy, ket + 1);
    }
    if(ket == m){
        return dp[egy][ket] = marad - megold(egy+1, ket);
    }


    int a = megold(egy + 1, ket + 1);
    int b = megold(egy + 1, ket);
    int c = megold(egy, ket + 1);

    return dp[egy][ket] = marad - min(a, min(b, c));
}

int main()
{
    cin >> n >> m >> k;

    a.assign(n, 0);
    b.assign(m, 0);

    for(int &x : a) cin >> x;
    for(int &x : b) cin >> x;

    sufA.assign(n+1, 0);
    sufB.assign(m+1, 0);
    for(int i = n - 1; i >= 0; i--){
        sufA[i] = sufA[i+1] + a[i];
    }
    for(int i = m - 1; i >= 0; i--){
        sufB[i] = sufB[i+1] + b[i];
    }


    vector<pii> kerdes(k);
    map<pii, int> valasz;
    for(int i = 0; i < k; i++){
        int a, b;
        cin >> a >> b;
        a--; b--;

        kerdes[i] = {a, b};
        valasz.insert({{a, b}, -1});
    }


    vector<int> egy, ket, har;
    har.assign(10004, 0);
    ket.assign(10004, 0);
    egy.assign(10004, 0);
    ket[n] = b.back();
    ket[n - 1] = a.back();

    /*vector<vector<int>> dp(3, vector<int>(10001, 0));
    dp[2][n] = b.back();
    dp[2][n - 1] = a.back();*/

    for(int ossz = n+m - 2; ossz >= 0; ossz--){
        for(int x = max(0, ossz - m); x <= min(ossz, n); x++){
            int y = ossz - x;

            int marad = sufA[x] + sufB[y];


            if(x == n){
                egy[x] = marad - ket[x];
            } else if(y == m){
                egy[x] = marad - ket[x + 1];
            } else{
                egy[x] = marad - min(ket[x], min(har[x + 1], ket[x + 1]));
            }

            if(valasz.count({x, y})){
                valasz[{x,y}] = egy[x];
            }
        }

        swap(ket, har);
        swap(egy, ket);
    }

    for(int i = 0; i < k; i++){
        cout << valasz[kerdes[i]] << "\n";
    }
}
SubtaskSumTestVerdictTimeMemory
base14/40
1Accepted0/01ms316 KiB
2Accepted0/0393ms916 KiB
3Accepted1/12ms316 KiB
4Accepted1/12ms316 KiB
5Accepted1/16ms316 KiB
6Accepted1/16ms528 KiB
7Accepted1/11ms316 KiB
8Accepted1/12ms536 KiB
9Accepted1/14ms500 KiB
10Accepted1/16ms564 KiB
11Accepted1/18ms564 KiB
12Accepted1/19ms564 KiB
13Accepted1/1109ms884 KiB
14Accepted1/183ms664 KiB
15Accepted1/168ms600 KiB
16Accepted1/167ms564 KiB
17Time limit exceeded0/21.1s564 KiB
18Time limit exceeded0/21.1s564 KiB
19Time limit exceeded0/21.082s564 KiB
20Time limit exceeded0/21.082s1076 KiB
21Time limit exceeded0/21.082s1076 KiB
22Time limit exceeded0/21.1s1076 KiB
23Time limit exceeded0/31.085s1076 KiB
24Time limit exceeded0/31.085s1076 KiB
25Time limit exceeded0/41.088s1076 KiB
26Time limit exceeded0/41.1s1076 KiB