天天看点

【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;
}