思路:将二维转化为一维
一维思路:
for(int i=1;i<=n;i++)
{
temp[i]=(tem[i-1]>0)?temp[i-1]:0+num[i];
if(Max<temp[i])
Max=temp[i];
}
答案:
#include<stdio.h>
#include<string.h>
int num[110][110];
int dp[110];
int temp[110];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
scanf("%d",&num[i][j]);
int Max=0;
for(int i=1; i<=n; i++)
{
for(int j=i; j<=n; j++)
{
for(int k=1; k<=n; k++)
{
temp[k]+=num[j][k];
dp[k]=temp[k]+dp[k-1]>0?temp[k]+dp[k-1]:0;
if(Max<dp[k])
Max=dp[k];
}
}
memset(temp,0,sizeof(temp));
}
printf("%d\n",Max);
}
return 0;
}