YEZAELP

CUBE-182: Maximum Submatrix Sum

Jun 13th, 2020
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const long long INF=2e18;
  4. vector <vector<long long>> qs(1001,vector<long long>(1001,0));
  5. int main(){
  6.     int n,h,w;
  7.     long long mx=-INF;
  8.  
  9.     scanf("%d%d%d",&n,&h,&w);
  10.  
  11.     for(int i=1;i<=n;i++){
  12.         scanf("%lld",&qs[i][0]);
  13.     }
  14.     for(int i=1;i<=n;i++){
  15.         scanf("%lld",&qs[0][i]);
  16.     }
  17.     for(int i=1;i<=n;i++){
  18.         for(int j=1;j<=n;j++){
  19.             if(i==1&&j==1) qs[i][j] = qs[i][0]+qs[0][j];
  20.             else if(i==1) qs[i][j] = (qs[i][0]+qs[0][j]) + qs[i][j-1];
  21.             else if(j==1) qs[i][j] = (qs[i][0]+qs[0][j]) + qs[i-1][j];
  22.             else  qs[i][j] = (qs[i][0]+qs[0][j]) + qs[i-1][j] + qs[i][j-1] - qs[i-1][j-1];
  23.             if(i>=h && j>=w){
  24.                 if(i-h<=0 && j-w<=0) mx=max(mx, qs[i][j]);
  25.                 else if(i-h<=0) mx=max(mx, qs[i][j] - qs[i][j-w] );
  26.                 else if(j-w<=0) mx=max(mx, qs[i][j] - qs[i-h][j] );
  27.                 else mx = max(mx, qs[i][j] - qs[i-h][j] - qs[i][j-w] + qs[i-h][j-w] );
  28.             }
  29.         }
  30.     }
  31.     printf("%lld",mx);
  32.  
  33.     return 0;
  34. }
Add Comment
Please, Sign In to add comment