Informatică, întrebare adresată de qweasdzxc30uoz9ald, 9 ani în urmă

Se dă o matrice mt cu N linii și M coloane. Să se afle submatricea de sumă maximă din matrice.

Răspunsuri la întrebare

Răspuns de CinevaFaraNume
1

Răspuns:

#include <iostream>

using namespace std;

int s[1000][1000];

int main(){

int n,m,x;

cin >> n >> m;

for(int i = 0; i < n; i++){

 for(int j = 0; j < m; j++){

  cin >> x;

  s[i][j] = s[i-1][j] + s[i][j-1] - s[i-1][j-1] + x;

 }

}

int smax = 0, s_;

int i_1, i_2, j_1, j_2;

for(register int i = 0; i < n; i++){

 for(register int j = 0; j < m; j++){

  for(register int dx = 0; dx < m - j; dx++){

   for(register int dy = 0; dy < n - i; dy++){

    s_ = s[i+dy][j+dx] - s[i-1][j+dx] - s[i+dy][j-1] + s[i-1][j-1];

    if(s_ > smax){

     smax = s_;

     i_1 = i+1;

     i_2 = i+1+dy;

     j_1 = j+1;

     j_2 = j+1+dx;

    }

   }

  }

 }

}

cout << smax << '\n' << i_1 << ' ' << j_1 << ' ' << i_2 << ' ' << j_2;

}

Explicație:

Se folosesc sume partiale pe matrice.


qweasdzxc30uoz9ald: Salut inteleg o parte din cod dar poti sa imi explici ce e cu register si cu lutima parte
CinevaFaraNume: Pana nu o sa intelegi ce e un registru nu iti pot explica ce e cu el.
Dar daca intelegi este o variabila pusa intr-un registru in loc de stack.
Si care e "ultima parte"? Scrierea cred ca e destul de usor de inteles.
Alte întrebări interesante