252152026-02-18 13:20:30AblablablaSzámsorjáték (40 pont)cpp17Runtime error 14/40195ms32000 KiB
#include <bits/stdc++.h>

using namespace std;

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];
    }

    dp.assign(n+1, vector<int>(m+1, -1));


    while(k--){
        int egy, ket;
        cin >> egy >> ket;
        egy--; ket--;

        cout << megold(egy, ket) << "\n";
    }
}
SubtaskSumTestVerdictTimeMemory
base14/40
1Accepted0/01ms316 KiB
2Accepted0/0195ms20532 KiB
3Accepted1/12ms820 KiB
4Accepted1/13ms1012 KiB
5Accepted1/13ms2612 KiB
6Accepted1/17ms3124 KiB
7Accepted1/11ms316 KiB
8Accepted1/13ms820 KiB
9Accepted1/14ms824 KiB
10Accepted1/16ms828 KiB
11Accepted1/18ms936 KiB
12Accepted1/19ms820 KiB
13Accepted1/143ms4472 KiB
14Accepted1/137ms4404 KiB
15Accepted1/137ms4448 KiB
16Accepted1/135ms4408 KiB
17Runtime error0/237ms32000 KiB
18Runtime error0/235ms32000 KiB
19Runtime error0/232ms32000 KiB
20Runtime error0/230ms32000 KiB
21Runtime error0/237ms32000 KiB
22Runtime error0/230ms32000 KiB
23Runtime error0/332ms32000 KiB
24Runtime error0/330ms32000 KiB
25Runtime error0/435ms32000 KiB
26Runtime error0/429ms32000 KiB