题目链接:http://poj.org/problem?id=2479
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std ;
int main(){
fstream cin("x.in") ;
int n, i, j, k, h, g, ans=-9999 ;
int a[105][105], dp[105], b[105] ;
while(cin>>n!=0){
for(i=0; i<n; i++)
for(j=0; j<n; j++)
cin >> a[i][j] ;
for(i=0; i<n; i++){
for(j=i+1; j<n; j++){
memset(dp, 0, sizeof(dp)) ;
memset(b, 0, sizeof(b)) ;
for(k=0; k<n; k++){ //遍历列范围内的所有元素
for(h=i; h<=j; h++){ //确定列范围
b[k] += a[h][k] ;
}
dp[k+1] = dp[k]>=0?dp[k]+b[k]:b[k] ;//求出当前列范围内以k为行下限的最大值
}
for(g=0; g<k+1; g++)
ans = ans>dp[g]?ans:dp[g] ;
}
}
cout << ans << endl ;
}
return 0 ;
}
#include<fstream>
#include<cstring>
using namespace std ;
int main(){
fstream cin("x.in") ;
int n, i, j, k, h, g, ans=-9999 ;
int a[105][105], dp[105], b[105] ;
while(cin>>n!=0){
for(i=0; i<n; i++)
for(j=0; j<n; j++)
cin >> a[i][j] ;
for(i=0; i<n; i++){
for(j=i+1; j<n; j++){
memset(dp, 0, sizeof(dp)) ;
memset(b, 0, sizeof(b)) ;
for(k=0; k<n; k++){ //遍历列范围内的所有元素
for(h=i; h<=j; h++){ //确定列范围
b[k] += a[h][k] ;
}
dp[k+1] = dp[k]>=0?dp[k]+b[k]:b[k] ;//求出当前列范围内以k为行下限的最大值
}
for(g=0; g<k+1; g++)
ans = ans>dp[g]?ans:dp[g] ;
}
}
cout << ans << endl ;
}
return 0 ;
}