二维差分数组

#include <stdio.h>
#define Max(x, y) x > y ? x : y;
#define Min(x, y) x > y ? y : x;

int n, m, ans = -99999;
int a[405][405], sum[405][405];
int main() {
    int i, j, k, l;
    scanf("%d%d",&n,&m);
    for(i = 1; i <= n; i++) {
        for(j = 1; j <= m; j++) {
            scanf("%d",&a[i][j]);
        }
    }
    for(i = 1; i <= n; i++) {
        for(j = 1; j <= m; j++) {
            sum[i][j] = a[i][j] + sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1];
        }
    }
    for(i = 1; i <= n; i++){
        for(j = 1; j <= m; j++){
            for(k = i; k <= n; k++){
                for(l = j; l <= m; l++){
                    int x = sum[k][l] - sum[i - 1][l] - sum[k][j - 1] + sum[i - 1][j - 1];
                    ans = Max(ans, x);
                    
                }
            }
        }    
    }
    /*
    for(i = 1; i <= n; i++) {
        for(j = 1; j <= m; j++) {
            printf("%d  ",sum[i][j]);
        }
        printf("\n");
    }
    */
    printf("%d\n",ans);


    return 0;
}

 

posted @ 2021-04-17 14:46  荣荣荣荣荣荣  阅读(121)  评论(0)    收藏  举报