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 ; }
快别扯淡了,我什么都不想听