小墨在努力!!
吗了个b的。。。。。

http://poj.org/problem?id=1050

Source Code

Problem: 1050  User: XXX
Memory: 216K  Time: 0MS 
Language: C++  Result: Accepted 

Source Code 
#include <stdio.h>
int num[100][100] ,sum[100][100] ;
//初始化sum数组
void init(int n) {
     for(int i = 0 ; i < n ; i++) {
          sum[0][i] = 0 ;
          sum[1][i] = num[0][i] ;
     }
     for(int i = 2 ; i < n + 1 ; i++) {
          for(int j = 0 ; j < n ; j++) {
               sum[i][j] = sum[i - 1][j] + num[i - 1][j] ;
          }
     }
}
//压缩成一维的状态,然后最大子段和
int solve(int n) {
     int max = 0 ;
     for(int i = 1 ; i <= n ; i++) {
          for(int j = i ; j <= n ;j++) {
               int var ,dpsum = 0 ;
               for(int k = 0 ; k < n ; k++) {
                    var = sum[j][k] - sum[i - 1][k] ;
                    dpsum = (dpsum + var) > 0 ? (dpsum + var) : var ;
                    if(dpsum > max) {
                         max = dpsum ;
                    }
               }
          }
     }
     return max ;
}
int main() {
     int n ;
     while(scanf("%d" ,&n) != EOF) {
          for(int i = 0 ; i < n ; i++) {
               for(int j = 0 ; j < n ; j++) {
                    scanf("%d",&num[i][j]) ;
               }
          }
          init(n) ;
          printf("%d\n",solve(n)) ;
     }
     return 0 ;
}

 

posted on 2012-07-21 13:26  小墨在努力!!  阅读(165)  评论(0编辑  收藏  举报