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