Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7620 Accepted Submission(s): 3692
ios
#include <iostream> #include <cstdio> using namespace std; #define N 105 int arr[N][N],b[N]; int dp(int *a,int m) //求一維數組的最大子段和 { int i,sum,max; sum = 0; max = 0; for(i=0; i<N; i++) { sum += a[i]; if(sum<0) sum = 0; if(sum>max) max = sum; } return max; } int main() { int i,j,k,n,sum,max; while(scanf("%d",&n)!=EOF) { for(i=0; i<n; i++) for(j=0; j<n; j++) scanf("%d",&arr[i][j]); max = 0; for(i=0; i<n; i++) { memset(b,0,sizeof(b)); for(j=i; j<n; j++) { for(k=0; k<n; k++) b[k] += arr[j][k]; sum = dp(b,n); if(sum>max) max = sum; } } printf("%d\n",max); } return 0; }