Advertisement
win11905

Untitled

Oct 20th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. const int MAXN = 1505;
  7.  
  8. int p, arr[MAXN][MAXN], qs[MAXN][MAXN];
  9. int dpl[MAXN][MAXN][4], dpr[MAXN][MAXN][4];
  10.  
  11. int sz(int x, int y) {
  12.     return qs[x][y] - qs[x-p][y] - qs[x][y-p] + qs[x-p][y-p];
  13. }
  14.  
  15. int solve(int n, int m) {
  16.     memset(dpl, 0, sizeof dpl);
  17.     memset(dpr, 0, sizeof dpr);
  18.     for(int i = p; i <= n; ++i)
  19.     for(int j = p; j <= m; ++j)
  20.     for(int k = 1; k <= 3; ++k) {
  21.         dpl[i][j][k] = max(dpl[i-p][m][k-1], dpl[i][j-p][k-1]) + sz(i, j);
  22.         dpl[i][j][k] = max(dpl[i][j][k], max(dpl[i-1][j][k], dpl[i][j-1][k])); 
  23.     }
  24.     return dpl[n][m][3];
  25. }
  26.  
  27. int main() {
  28.     // freopen("r", "r", stdin);
  29.     int n, m;
  30.     scanf("%d%d%d", &n, &m, &p);
  31.     for(int i = 1; i <= n; ++i) {
  32.         for(int j = 1; j <= m; ++j) {
  33.             scanf("%d", &arr[i][j]);
  34.             qs[i][j] = arr[i][j] + qs[i-1][j] + qs[i][j-1] - qs[i-1][j-1];
  35.         }
  36.     }
  37.     int mx = 0;
  38.     mx = max(mx, solve(n, m));
  39.     for(int i = 1; i <= n; ++i) {
  40.         for(int j = 1; j <= m; ++j) {
  41.             qs[i][j] = arr[n-i+1][j] + qs[i-1][j] + qs[i][j-1] - qs[i-1][j-1];
  42.         }
  43.     }
  44.     mx = max(mx, solve(n, m));
  45.     swap(n, m);
  46.     for(int i = 1; i <= n; ++i) {
  47.         for(int j = 1; j <= m; ++j) {
  48.             qs[i][j] = arr[j][i] + qs[i-1][j] + qs[i][j-1] - qs[i-1][j-1];
  49.         }
  50.     }
  51.     mx = max(mx, solve(n, m));
  52.     for(int i = 1; i <= n; ++i) {
  53.         for(int j = 1; j <= m; ++j) {
  54.             qs[i][j] = arr[j][n-i+1] + qs[i-1][j] + qs[i][j-1] - qs[i-1][j-1];
  55.         }
  56.     }
  57.     mx = max(mx, solve(n, m));
  58.     printf("%d\n", mx);
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement