Advertisement
FHVirus

Untitled

Nov 25th, 2020
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.19 KB | None | 0 0
  1. #pragma GCC optimize("Ofast")
  2. // #include<unistd.h>
  3. // inline char RC(){static char buf[65536],*p=buf,*q=buf;return p==q&&(q=(p=buf)+read(0,buf,65536))==buf?-1:*p++;}
  4. // inline int R(){static char c;int a;while(((c=RC())<'0'||c>'9')&&c!='-'&&c!=-1);if(c=='-'){a=0;while((c=RC())>='0'&&c<='9')a*=10,a-=c^'0';}else{a=c^'0';while((c=RC())>='0'&&c<='9')a*=10,a+=c^'0';}return a;}
  5. // inline void W(int n){char OB[12],OP=0,buf[12],p;if(n==0)OB[OP++]='0';p=0;if(n<0){OB[OP++]='-';while(n)buf[p++]='0'-(n%10),n/=10;}else{while(n)buf[p++]='0'+(n%10),n/=10;}for(--p;p>=0;--p)OB[OP++]=buf[p];write(1,OB,OP);}
  6.  
  7. #include<iostream>
  8. #include<algorithm>
  9. using namespace std;
  10. #define fi(i,a,b) for(int i=a;i<=b;++i)
  11. #define fd(i,a,b) for(int i=a;i>=b;--i)
  12. #define N 1600
  13. #define NINF -300000000
  14. int m, n, k, g[N][N], s[N][N];
  15. // lu ru ld rd
  16. // - |
  17. int a[N][N], b[N][N], c[N][N], d[N][N];
  18. int u[N], v[N];
  19.  
  20. signed main(){
  21.     // m = R(), n = R(), k = R();
  22.     ios_base::sync_with_stdio(0);cin.tie(0);
  23.     cin >> m >> n >> k;
  24.  
  25.     fi(i,0,m+1)fi(j,0,n+1) a[i][j] = b[i][j] = c[i][j] = d[i][j] = NINF;
  26.     fi(i,0,m+1) u[i] = NINF;
  27.     fi(i,0,n+1) v[i] = NINF;
  28.  
  29.     fi(i,1,m)fi(j,1,n) cin >> g[i][j];// = R();
  30.     fi(i,1,m)fi(j,1,n) s[i][j] = g[i][j] + s[i-1][j] + s[i][j-1] - s[i-1][j-1];
  31.     fd(i,m,k)fd(j,n,k) s[i][j] = s[i][j] - s[i-k][j] - s[i][j-k] + s[i-k][j-k];
  32.  
  33.     fi(i,k,m)fi(j,k,n) a[i][j] = max({s[i][j], a[i-1][j], a[i][j-1]});
  34.     fi(i,k,m)fd(j,m-k+1,1) b[i][j] = max({s[i][j+k-1], b[i-1][j], b[i][j+1]});
  35.     fd(i,m-k+1,1)fi(j,k,n) c[i][j] = max({s[i+k-1][j], c[i+1][j], c[i][j-1]});
  36.     fd(i,m-k+1,1)fd(j,m-k+1,1) d[i][j] = max({s[i+k-1][j+k-1], d[i+1][j], d[i][j+1]});
  37.  
  38.     fi(i,k,m)fi(j,k,n) u[i] = max(u[i], s[i][j]);
  39.     fi(i,k,m)fi(j,k,n) v[j] = max(v[j], s[i][j]);
  40.  
  41.     int ans = NINF;
  42.     fi(i,k,m-k)fi(j,k,n-k) ans = max({
  43.         ans,
  44.         a[i][j] + b[i][j + 1] + c[i + 1][n],     // _|_
  45.         a[m][j] + b[i][j + 1] + d[i + 1][j + 1], // |-
  46.         a[i][n] + c[i + 1][j] + d[i + 1][j + 1], // "|"
  47.         a[i][j] + b[m][j + 1] + c[i + 1][j]      // -|
  48.     });
  49.  
  50.     // =
  51.     fi(i,k,m-2*k)fi(j,i+k,m-k) ans = max(ans, a[i][n] + u[j] + c[j+1][n]);
  52.     fi(i,k,n-2*k)fi(j,i+k,n-k) ans = max(ans, a[m][i] + v[j] + b[m][j+1]);
  53.  
  54.     // W(ans);
  55.     cout << ans << '\n';
  56.     return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement