254242026-02-20 00:24:46999Táblatöréscpp17Elfogadva 50/509ms2288 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;

vector<vector<int>> pref,v;
int dp[31][31][31][31];

int S(int b, int j, int f, int a){
    if(b>j||f>a)return 0;
    return pref[j][a]-pref[b-1][a]-pref[j][f-1]+pref[b-1][f-1];
}

int F(int b,int j, int f, int a){
	if(b>j||f>a)return 0;
	if(dp[b][j][f][a])return dp[b][j][f][a];
    int ossz=S(b,j,f,a),ans=0,w1=min({F(b+1,j,f,a),F(b,j-1,f,a),F(b,j,f+1,a),F(b,j,f,a-1)});
    ans=ossz-w1;
	dp[b][j][f][a]=ans;
	return ans;
}

int main() {
    int n,m;cin>>n>>m;
    v.resize(n+2,vector<int>(m+2));
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=m;j++){
            cin>>v[i][j];
        }
    }
    pref.resize(n+2,vector<int>(m+2));
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=m;j++){
            pref[i][j]=pref[i-1][j]+pref[i][j-1]+v[i][j]-pref[i-1][j-1];
        }
    }
    cout<<F(1,n,1,m)<<endl;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms500 KiB
2Elfogadva0/08ms2100 KiB
3Elfogadva2/21ms316 KiB
4Elfogadva2/21ms316 KiB
5Elfogadva1/11ms508 KiB
6Elfogadva1/11ms564 KiB
7Elfogadva1/13ms2104 KiB
8Elfogadva2/22ms1332 KiB
9Elfogadva3/32ms564 KiB
10Elfogadva3/33ms820 KiB
11Elfogadva3/34ms1588 KiB
12Elfogadva3/34ms1588 KiB
13Elfogadva4/47ms2152 KiB
14Elfogadva4/48ms2100 KiB
15Elfogadva4/48ms2104 KiB
16Elfogadva5/59ms2088 KiB
17Elfogadva5/58ms2100 KiB
18Elfogadva5/58ms2288 KiB
19Elfogadva1/19ms2100 KiB
20Elfogadva1/18ms2200 KiB