Kaidul

UVa 10827

Dec 2nd, 2013
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.80 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define Max 160
  6.  
  7. int N;
  8. int M[Max][Max];
  9.  
  10. int main(void) {
  11. #ifndef ONLINE_JUDGE
  12.     freopen("input.txt", "r", stdin);
  13. #endif // ONLINE_JUDGE
  14.     int tcase;
  15.     scanf("%d", &tcase);
  16.     while(tcase--) {
  17.         scanf("%d", &N);
  18.         for(int i = 0, n = N * 2 - 1; i < n; i++) {
  19.             for(int j = 0; j < n; j++) {
  20.                 if(i < N and j < N) {
  21.                     scanf("%d", &M[i][j]);
  22.                     M[i + N][j] = M[i][j + N] = M[i + N][j + N] = M[i][j];
  23.                 }
  24.                 if(i > 0) M[i][j] += M[i - 1][j];
  25.                 if(j > 0) M[i][j] += M[i][j - 1];
  26.                 if(i > 0 and j > 0) M[i][j] -= M[i - 1][j - 1];
  27.             }
  28.         }
  29.         int ans = INT_MIN;
  30.         for(int i = 0; i < N; i++) {
  31.             for(int j = 0; j < N; j++) {
  32.                 for(int k = i; k < i + N; k++) {
  33.                     for(int l = j; l < j + N; l++) {
  34.                         int sum = M[k][l];
  35.                         if(i > 0) sum -= M[i - 1][l];
  36.                         if(j > 0) sum -= M[k][j - 1];
  37.                         if(i > 0 and j > 0) sum += M[i - 1][j - 1];
  38.                         ans = max(ans, sum);
  39.                     }
  40.                 }
  41.             }
  42.         }
  43.         printf("%d\n", ans);
  44.     }
  45. }
  46. /* WA (still don't know why)
  47. #include <bits/stdc++.h>
  48.  
  49. using namespace std;
  50.  
  51. #define Max 160
  52.  
  53. int N, M[Max][Max], temp[Max];
  54.  
  55. int kadane() {
  56.     int sum = 0, maxSum = INT_MIN;
  57.     bool allNegative = true;
  58.  
  59.     for(int i = 0; i < N; i++) {
  60.         sum = 0;
  61.         for(int j = i; j < N + i; j++) {
  62.             sum += temp[j];
  63.             if(sum < 0) {
  64.                 sum = 0;
  65.             } else if(sum > maxSum) {
  66.                 maxSum = sum;
  67.                 allNegative = false;
  68.             }
  69.         }
  70.     }
  71.  
  72.     if(!allNegative)
  73.         return maxSum;
  74.  
  75.     maxSum = temp[0];
  76.  
  77.     for(int i = 1, n = 2 * N - 1; i < n; i++)
  78.         maxSum = max(maxSum, temp[i]);
  79.  
  80.     return maxSum;
  81. }
  82.  
  83. int main(void) {
  84. #ifndef ONLINE_JUDGE
  85.     freopen("input.txt", "r", stdin);
  86. #endif // ONLINE_JUDGE
  87.     int tcase;
  88.     scanf("%d", &tcase);
  89.     while (tcase--) {
  90.         scanf("%d", &N);
  91.         for(int i = 0; i < N; i++) {
  92.             for(int j = 0; j < N; j++) {
  93.                 scanf("%d", &M[i][j]);
  94.                 M[i][j + N] = M[i][j];
  95.             }
  96.         }
  97.         for(int i = 0; i < N; i++) {
  98.             for(int j = 0, n = 2 * N - 1; j < n; j++) {
  99.                 M[i + N][j] = M[i][j];
  100.             }
  101.         }
  102.  
  103.         int maxSum = INT_MIN;
  104.         int row = 2 * N - 1, col = 2 * N - 1;
  105.  
  106.         for(int left = 0; left < col; ++left) {
  107.             memset(temp, 0, sizeof temp);
  108.             for(int right = left; right < col; ++right) {
  109.                 if(right == N) {
  110.                     memset(temp, 0, sizeof temp);
  111.                     for(int i = 0; i < row; ++i)
  112.                         temp[i] += M[i][N - 1];
  113.                 }
  114.                 for(int i = 0; i < row; ++i)
  115.                     temp[i] += M[i][right];
  116.  
  117.                 maxSum = max(maxSum, kadane());
  118.             }
  119.         }
  120.         printf("%d\n", maxSum);
  121.     }
  122.     return 0;
  123. }
  124. */
Advertisement
Add Comment
Please, Sign In to add comment