http://acm.hdu.edu.cn/showproblem.php?pid=1081
转换成 最大连续子序列就行了
代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
#include <stack>
using namespace std;
int matrix[105][105];
int dp[105];
int main()
{
int n;
while(scanf("%d",&n)==1&&n)
{
memset(matrix,0,sizeof(matrix));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&matrix[i][j]);
matrix[i][j]+=matrix[i-1][j];
}
for(int i=0;i<=n;i++)
dp[i]=-500;
int maxn=-500;
for(int i=1;i<=n;i++)
for(int k=0;k<i;k++)
for(int j=1;j<=n;j++)
{
dp[j]=max(matrix[i][j]-matrix[k][j]+dp[j-1],matrix[i][j]-matrix[k][j]);
maxn=max(maxn,dp[j]);
}
printf("%d\n",maxn);
}
}