题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1081
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 8920 Accepted Submission(s):
4312
1 #include <cstdio> 2 #include <cstring> 3 using namespace std; 4 5 int a[111][111],dp[111],n; 6 int sum,ans; 7 8 int main () 9 { 10 int i,j,k; 11 while (scanf ("%d",&n)==1) 12 { 13 for (i=0; i<n; i++) 14 for (j=0; j<n; j++) 15 scanf ("%d",&a[i][j]); 16 ans = -99999999; 17 for (i=0; i<n; i++) 18 { 19 memset(dp, 0, sizeof(dp));//每次更新dp清零 20 for (j=i; j<n; j++) 21 { 22 sum = -1;//同上 23 for (k=0; k<n; k++)//每列元素相加 24 { 25 dp[k] += a[j][k]; 26 } 27 for (k=0; k<n; k++)//找到和最大的那列 28 { 29 if (sum > 0) 30 sum += dp[k]; 31 else 32 sum = dp[k]; 33 if (sum > ans) 34 ans = sum; 35 } 36 } 37 } 38 printf ("%d\n",ans); 39 } 40 return 0; 41 }
原文:http://www.cnblogs.com/dxd-success/p/4360932.html