Submission #1225271

#TimeUsernameProblemLanguageResultExecution timeMemory
1225271pensiveRaisins (IOI09_raisins)C++20
25 / 100
5095 ms328 KiB
#include <bits/stdc++.h>

using namespace std;
#define REP(a,i,n) for (int i=a;i<n;i++)
#define ll long long

ll choc[51][51];

ll func(int a, int b, int x, int y) {
    if (a==x && b==y) {
        return 0;
    }
    ll mini = 1e9, cur = choc[x][y] + choc[a-1][b-1] - choc[a-1][y] - choc[x][b-1];
    //cout << a << ' ' << b << ' ' << x << ' ' << y << ": " <<cur << endl;
    REP(a, i, x) {
        mini = min(mini, func(a, b, i, y) + func(i+1, b, x, y));
    }
    REP(b, j, y) {
        mini = min(mini, func(a, b, x, j) + func(a, j+1, x, y));
    }
    return mini + cur;
}

void prefixing(int n, int m) {
    REP(1, i, n+1) {
        REP(1, j, m+1) {
            choc[i][j]+= choc[i][j-1];
        }
    }
    REP(1, j, m+1) {
        REP(1, i, n+1) {
            choc[i][j]+= choc[i-1][j];
        }
    }
}

int main() {
    int n, m; cin >> n >> m;
    REP(1, i, n+1) {
        REP(1, j, m+1) {
            cin >> choc[i][j];
        }
    }
    prefixing(n, m);
    cout << func(1, 1, n, m);
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...