Advertisement
Guest User

H другого чела

a guest
Mar 23rd, 2018
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.73 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int N = 1600;
  6.  
  7. int n, m, k, dpp[3][N][N], pref[N][N], dps[3][N][N], ar[N][N], ans;
  8.  
  9. int main()
  10. {
  11.     cin >> n >> m >> k;
  12.     for (int i = 1; i <= n; i++)
  13.     {
  14.         for (int j = 1; j <= m; j++)
  15.         {
  16.             cin >> ar[i][j];
  17.             pref[i][j] = pref[i - 1][j] + pref[i][j - 1] - pref[i - 1][j - 1] + ar[i][j];
  18.             if (i >= k && j >= k)
  19.             {
  20.                 dpp[1][i][j] = max( pref[i][j] - pref[i][j - k] - pref[i - k][j] + pref[i - k][j - k], max( dpp[1][i - 1][j], dpp[1][i][j - 1] ) );
  21.                 dpp[2][i][j] = max( max(dpp[2][i][j - 1], dpp[2][i - 1][j]), pref[i][j] - pref[i][j - k] - pref[i - k][j] + pref[i - k][j - k] + max( dpp[1][i - k][j], dpp[1][i][j - k] ) );
  22.             }
  23.         }
  24.     }
  25.     for (int i = n - k + 1; i >= 1; i--)
  26.     {
  27.         for (int j = m - k + 1; j >= 1; j--)
  28.         {
  29.             dps[1][i][j] = max( pref[i + k - 1][j + k - 1] - pref[i - 1][j + k - 1] - pref[i + k - 1][j - 1] + pref[i - 1][j - 1], max( dps[1][i + 1][j], dps[1][i][j + 1] ) );
  30.  
  31.             dps[2][i][j] = max( max(dps[2][i + 1][j], dps[2][i][j + 1]), pref[i + k - 1][j + k - 1] - pref[i - 1][j + k - 1] - pref[i + k - 1][j - 1] + pref[i - 1][j - 1] +
  32.  
  33.                              max( dps[1][i][j + k], dps[1][i + k][j] ) );
  34.         }
  35.     }
  36.     for (int i = 1; i <= n - k + 1; i++)
  37.     {
  38.         for (int j = 1; j <= m - k + 1; j++)
  39.         {
  40.             int sum = pref[i + k - 1][j + k - 1] - pref[i - 1][j + k - 1] - pref[i + k - 1][j - 1] + pref[i - 1][j - 1];
  41.             ans = max( ans, sum + max( max(dpp[2][n][j - 1], dps[2][1][j + k]) , max(dpp[2][i - 1][m], dps[2][i + k][1]) ) );
  42.         }
  43.     }
  44.     cout << ans << endl;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement