Submission #1210930

#TimeUsernameProblemLanguageResultExecution timeMemory
1210930Hamed_GhaffariRaisins (IOI09_raisins)C++20
100 / 100
86 ms21060 KiB
#include<bits/stdc++.h>
using namespace std;

#define mins(a, b) (a = min(a,b))

const int MXN = 51;

int n, m, a[MXN][MXN], dp[MXN][MXN][MXN][MXN];

inline int get(int i, int j, int k, int l) {
    return a[k][l] - a[i-1][l] - a[k][j-1] + a[i-1][j-1];
}

int32_t main() {
    cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);
    cin >> n >> m;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++) {
            cin >> a[i][j];
            a[i][j] += a[i-1][j] + a[i][j-1] - a[i-1][j-1];
        }
    for(int lnx=1; lnx<=n; lnx++)
        for(int i=1, k=lnx; k<=n; i++, k++)
            for(int lny=1+(lnx==1); lny<=m; lny++)
                for(int j=1, l=lny; l<=m; j++, l++) {
                    dp[i][j][k][l] = 2e9;
                    for(int x=i; x<k; x++)
                        mins(dp[i][j][k][l], dp[i][j][x][l]+dp[x+1][j][k][l]+get(i,j,k,l));
                    for(int x=j; x<l; x++)
                        mins(dp[i][j][k][l], dp[i][j][k][x]+dp[i][x+1][k][l]+get(i,j,k,l));
                }
    cout << dp[1][1][n][m] << '\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...