252152026-02-18 13:20:30AblablablaSzámsorjáték (40 pont)cpp17Futási hiba 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";
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base14/40
1Elfogadva0/01ms316 KiB
2Elfogadva0/0195ms20532 KiB
3Elfogadva1/12ms820 KiB
4Elfogadva1/13ms1012 KiB
5Elfogadva1/13ms2612 KiB
6Elfogadva1/17ms3124 KiB
7Elfogadva1/11ms316 KiB
8Elfogadva1/13ms820 KiB
9Elfogadva1/14ms824 KiB
10Elfogadva1/16ms828 KiB
11Elfogadva1/18ms936 KiB
12Elfogadva1/19ms820 KiB
13Elfogadva1/143ms4472 KiB
14Elfogadva1/137ms4404 KiB
15Elfogadva1/137ms4448 KiB
16Elfogadva1/135ms4408 KiB
17Futási hiba0/237ms32000 KiB
18Futási hiba0/235ms32000 KiB
19Futási hiba0/232ms32000 KiB
20Futási hiba0/230ms32000 KiB
21Futási hiba0/237ms32000 KiB
22Futási hiba0/230ms32000 KiB
23Futási hiba0/332ms32000 KiB
24Futási hiba0/330ms32000 KiB
25Futási hiba0/435ms32000 KiB
26Futási hiba0/429ms32000 KiB