█████████ ████ ███░░░░░███ ░░███ ███ ░░░ ██████ ███████ ██████ ██████ ░███ ███░░███ ███░░███ ███░░███ ███░░███ ░███ ░███ ░███░███ ░███ ░███████ ░███ ░███ ░░███ ███░███ ░███░███ ░███ ░███░░░ ░███ ░███ ░░█████████ ░░██████ ░░████████░░██████ ░░██████ ░░░░░░░░░ ░░░░░░ ░░░░░░░░ ░░░░░░ ░░░░░░

Envío 2393

Problema 0xa6 - Submatriz de suma máxima en una matriz no muy grande

  • Autor: pipelin1010
  • Fecha: 2020-12-16 05:53:12 UTC (Hace más de 3 años)
Caso # Resultado Tiempo Memoria
#1
Correcto
0.006 s 1 KBi
#2
Correcto
0.005 s 2 KBi
#3
Correcto
0.006 s 1 KBi
#4
Correcto
0.007 s 1 KBi
#5
Correcto
0.006 s 1 KBi
#6
Correcto
0.009 s 1 KBi
#7
Correcto
0.005 s 1 KBi
#8
Correcto
0.018 s 2 KBi
#9
Correcto
0.026 s 2 KBi
#10
Correcto
0.021 s 2 KBi
#11
Correcto
0.026 s 2 KBi
#12
Correcto
0.016 s 1 KBi
#13
Correcto
0.024 s 1 KBi
#14
Correcto
0.023 s 2 KBi
#15
Correcto
0.024 s 1 KBi
#16
Correcto
0.022 s 1 KBi
#17
Correcto
0.02 s 2 KBi
#18
Correcto
0.016 s 1 KBi
Puntos totales: 100 / 100

Código

//
#include <bits/stdc++.h>
using namespace std;
#define INF 1000000000
#define MOD 1000000007
#define PI 3.14159265
#define EPS 1e-9
#define Pi acos(-1.0)
typedef pair<int, int> ii;
typedef long long ll;
typedef vector<ll> vll;
typedef pair<ll,ll> pll;
#define forr(i,a,b) for(int i=(a); i<(b); i++)
#define clean(arr,val) memset(arr,val,sizeof(arr))
#define forn(i,n) forr(i,0,n)
#define PB push_back
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<pll> vpll;

/*CODE START HERE*/

int n,m,sum,ans;
int matrix[55][55];
int dp[55][55];

int main(){
    ios::sync_with_stdio(0);
    cin >> n >> m;
    forn(i,n){
        forn(j,m){
            cin >> matrix[i][j];
        }
    }
    clean(dp,0);

    forr(i,1,n+1){
        dp[i][1] = dp[i-1][1] + matrix[i-1][0];
    }

    forr(i,1,m+1){
        dp[1][i] = dp[1][i-1] + matrix[0][i-1];
    }

    forr(i,2,n+1){
        forr(j,2,m+1){
            dp[i][j] = dp[i-1][j] + dp[i][j-1] + matrix[i-1][j-1] - dp[i-1][j-1];
        }
    }

    // forn(i,n+1){
    //     forn(j,m+1){
    //         cout << dp[i][j] << "   ";
    //     }
    //     cout << "\n";
    // }
    ans = -INF;
    forr(i,1,n+1){
        forr(j,1,m+1){
            forn(k,i){
                forn(l,j){
                    sum = dp[i][j] - dp[k][j] - dp[i][l] + dp[k][l];
                    //cout << "SUM IS " << sum << "\n";
                    ans = max(sum,ans);
                }
            }            
        }
    }
    cout << ans << "\n";
    
    return 0;
}