题目链接: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, 0sizeof(dp)) ;
                memset(b, 0sizeof(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 ;
}

 

 

posted on 2011-09-26 22:55  追逐.  阅读(152)  评论(0编辑  收藏  举报