天天看點

【HDU1081】最大子矩陣的和

1.​​題目連結​​。題目的大意就是給定一個矩陣,求出這個矩陣中的一個和最大的子矩陣。

#include<bits/stdc++.h>
using namespace std;
int t[101][101], dp[101];
#pragma warning(disable:4996)
int main() {
  int n;
  while (scanf("%d", &n) != EOF && n != 0)
  {
    int  ans = -0xFFFFFFF, tmp;
    memset(t, 0, sizeof(t));
    for (int i = 1; i <= n; i++)
    {
      for (int j = 1; j <= n; j++)
      {
        scanf("%d", &tmp);
        t[j][i] = t[j][i - 1] + tmp;//預處理一下資料
      }
    }
    for (int i = 0; i <= n - 1; i++) {
      for (int j = i + 1; j <= n; j++) {
        memset(dp, 0, sizeof(dp));
        for (int k = 1; k <= n; k++)
        {
          dp[k] = max(dp[k - 1] + t[k][j] - t[k][i], t[k][j] - t[k][i]);
          ans = max(ans, dp[k]);
        }
      }
    }
    printf("%d\n", ans);
  }
  return 0;
}