参考:http://acm.hdu.edu.cn/showproblem.php?pid=1081
#include<stdio.h> #include<limits.h> #include<string.h> #define NUM 110 int get_max(int x,int y) { return x>y?x:y; } int main(void) { int N; int list[NUM][NUM]; while(scanf("%d",&N) != EOF) { int ans = INT_MIN; memset(list,0,sizeof(list)); int i,j,k; for(i = 1;i<=N;i++) for(j = 1;j<=N;j++) scanf("%d",&list[i][j]); for(i = 1;i<=N;i++) { for(j=1;j <= N;j++) list[i][j] += list[i][j-1]; } for(i = 1;i<=N;i++) for(j = i;j<=N;j++) { int sum = 0; for(k=1;k<=N;k++) { sum = get_max(sum+list[k][j] - list[k][i-1],list[k][j]-list[k][i-1]); ans = get_max(ans,sum); } } printf("%d\n",ans); } return 0; }