1 #include <iostream> 2 using namespace std; 3 int main(){ 4 int dp[501][501] = {0}; 5 int n, m; 6 cin >> n >> m; 7 for(int i = 1; i <= n; i++){ 8 for(int j = 1; j <= m; j++){ 9 int t; 10 cin >> t; 11 //每一行存的是与上面行的和(上面所有行) 12 dp[i][j] += dp[i - 1][j] + t; 13 } 14 } 15 int s = 0; 16 int max = -99999999; 17 for(int i = 1; i <= n; i++){ 18 for(int j = i; j <= n; j++){ 19 s = 0; 20 for(int k = 1; k <= m; k++){ 21 s += dp[j][k] - dp[i - 1][k];//按先按列走,然后按行数间隔递增的顺序(最外俩个循环) 22 if(s > max){ 23 max = s; 24 } 25 if(s < 0){ 26 s = 0; 27 } 28 } 29 } 30 } 31 cout << max; 32 return 0; 33 }
原文:https://www.cnblogs.com/AGoodDay/p/10580506.html