231292026-01-16 12:56:08AblablablaTáblatöréscpp17Elfogadva 50/5025ms4600 KiB
#include <bits/stdc++.h>

using namespace std;

int n, m;
vector<vector<int>> alap;

int sor(int a, int b, int c){
    int ossz = 0;

    for(int i = b; i <= c; i++){
        ossz += alap[a][i];
    }

    return ossz;
}

int osz(int a, int b, int c){
    int ossz = 0;

    for(int i = b; i <= c; i++){
        ossz += alap[i][a];
    }

    return ossz;
}

vector<vector<vector<vector<int>>>> dp;

int megold(int a, int b, int c, int d){ // sor kezd, sor veg, osz kezd, osz veg
    if(a > b || c > d){
        return 0;
    }
    if(dp[a][b][c][d] != -1){
        return dp[a][b][c][d];
    }

    int lepesSz = a + n - 1 - b + c + m - 1 - d;
    int vissza = 0;

    if(lepesSz % 2 == 0){ // kezdo jatekos
        int fent = megold(a + 1, b, c, d) + sor(a, c, d);
        int lent = megold(a, b - 1, c, d) + sor(b, c, d);
        int bal = megold(a, b, c + 1, d) + osz(c, a, b);
        int jobb = megold(a, b, c, d - 1) + osz(d, a, b);

        vissza = max(fent, max(lent, max(bal, jobb)));
    } else{
        int fent = megold(a + 1, b, c, d) - sor(a, c, d);
        int lent = megold(a, b - 1, c, d) - sor(b, c, d);
        int bal = megold(a, b, c + 1, d) - osz(c, a, b);
        int jobb = megold(a, b, c, d - 1) - osz(d, a, b);

        vissza = min(fent, min(lent, min(bal, jobb)));
    }

    return dp[a][b][c][d] = vissza;
}

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

    alap.assign(n, vector<int>(m, 0));
    int ossz = 0;

    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            cin >> alap[i][j];
            ossz += alap[i][j];
        }
    }

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

    cout << (ossz + megold(0, n - 1, 0, m - 1)) / 2 << "\n";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/017ms3892 KiB
3Elfogadva2/21ms316 KiB
4Elfogadva2/21ms316 KiB
5Elfogadva1/11ms508 KiB
6Elfogadva1/11ms316 KiB
7Elfogadva1/11ms316 KiB
8Elfogadva2/22ms316 KiB
9Elfogadva3/32ms528 KiB
10Elfogadva3/34ms1076 KiB
11Elfogadva3/39ms2112 KiB
12Elfogadva3/38ms2116 KiB
13Elfogadva4/417ms3892 KiB
14Elfogadva4/417ms3868 KiB
15Elfogadva4/425ms4404 KiB
16Elfogadva5/523ms4404 KiB
17Elfogadva5/524ms4600 KiB
18Elfogadva5/523ms4500 KiB
19Elfogadva1/124ms4404 KiB
20Elfogadva1/124ms4424 KiB