#include <bits/stdc++.h> #define MAX 100 #define INF 0x3f3f3f3f using namespace std; int findmax(int tmp[],int n){ int dp[MAX]; //为了避免修改tmp的值,将tmp的值复制到dp中,对dp进行操作 for(int i = 1; i <= n; i++) dp[i] = tmp[i]; for(int i = 2; i <= n; i++) { if(dp[i-1] > 0) dp[i] += dp[i-1]; } int l = dp[max_element(dp+1,dp+n+1) - dp]; //输出最大子序列和 return l; } int main(){ int n,i,j,k,a[MAX][MAX],tmp[MAX]; cin>>n; for(i = 1; i <= n; i++) for(j = 1; j <= n; j++) cin>>a[i][j]; int ans = -INF; for(i = 1; i <= n; i++){ //上坐标行数 memset(tmp,0,sizeof(tmp)); for(j = i; j <= n; j++){ //下坐标行数 for(k = 1; k <= n; k++) //二维压缩成一维,将n个数复制到tmp中,后续不断累加 tmp[k] += a[j][k]; int maxS = findmax(tmp,n); ans = max(ans,maxS); } } cout<<ans; }