動態規劃入門之最大連續子序列和。
#include <iostream>
#include <cstdio>
#define max(a,b) (((a) > (b)) ? (a) : (b))
using namespace std;
const int N = 100;
const int INF = -999999999;
int n;
int sum[N+2][N+2];
int temp[N+2];
void read_martrix()
{
scanf("%d", &n);
int x;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
{
scanf("%d", &x);
sum[i][j] = sum[i-1][j] + x;
}
}
int find_max(int start, int end)
{
for (int j = 1; j <= n; j++)
temp[j] = sum[end][j] - sum[start-1][j];
int count = 0;
int ans = INF;
for (int i = 1; i <= n; i++)
{
if (count < 0)
count = temp[i];
else
count += temp[i];
ans = max(ans, count);
}
return ans;
}
int main()
{
read_martrix();
// enumberate
int ans = INF;
for (int i = 1; i <= n; i++)
for (int j = i; j <= n; j++)
ans = max(ans, find_max(i, j));
printf("%d", ans);
return 0;
}