Submission #10696

#TimeUsernameProblemLanguageResultExecution timeMemory
10696gs14004Orchard (NOI14_orchard)C++98
25 / 25
376 ms20628 KiB
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;

int n,m,fcnt;
int* a[155];
int* s[155];

int ca[1000005];

int sum(){
    int me = *max_element(ca+1,ca+m+1);
    if(me < 0) return -me;
    int mv = 0, c = 0;
    for (int j=1; j<=m; j++) {
        c += ca[j];
        if(c < 0) c = 0;
        mv = max(mv,c);
    }
    return -mv;
}

int calc(int x, int y){
    int hi = y - x + 1;
    for (int j=1; j<=m; j++) {
        ca[j] = 2 * (s[y][j] - s[y][j-1] - s[x-1][j] + s[x-1][j-1]) - hi;
    }
    return fcnt + sum();
}

int main(){
    scanf("%d %d",&n,&m);
    for (int i=0; i<=n; i++) {
        a[i] = (int*)malloc(sizeof(int) * (m + 1));
        s[i] = (int*)malloc(sizeof(int) * (m + 1));
    }
    for (int i=0; i<=m; i++) {
        s[0][i] = 0;
    }
    for (int i=0; i<=n; i++) {
        s[i][0] = 0;
    }
    for (int i=1; i<=n; i++) {
        for (int j=1; j<=m; j++) {
            scanf("%d",&a[i][j]);
            s[i][j] = s[i][j-1] + s[i-1][j] - s[i-1][j-1] + a[i][j];
        }
    }
    fcnt = s[n][m];
    int res = 1e9;
    for (int i=1; i<=n; i++) {
        for (int j=i; j<=n; j++) {
            res = min(res,calc(i,j));
        }
    }
    printf("%d",res);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...