Submission #1352547

#TimeUsernameProblemLanguageResultExecution timeMemory
1352547vjudge1Raisins (IOI09_raisins)C++17
100 / 100
476 ms72092 KiB
#include "bits/stdc++.h"
using namespace std;
#define f1(n) for(int i=0;i<n;i++)
#define f3(n) for(int j=0;j<n;j++)
#define f2(m,n,q) for(int i=m;i<n;i+=q)
#define f4(m,n,q) for(int j=m;j<n;j+=q)
#define int long long
#define pb push_back
constexpr int N=55,M=1e10,LOG=21,mod=998244353,inf=1e15;
using pr=pair<int,int>;
using ar=array<int,3>;
int n,m,a[N][N],dp[N][N][N][N];
int rec(int x1,int y1,int x2,int y2) {
    if (x1>x2||y1>y2)return inf;
    if (x1==x2&&y1==y2)return 0;
    int &ret=dp[x1][y1][x2][y2];
    if (ret!=-1)return ret;
    // compute sum
    ret=inf;
    int sm=0;
    for (int i=x1;i<=x2;i++) {
        for (int j=y1;j<=y2;j++) {
            sm+=a[i][j];
        }
    }
    for (int k=x1;k<x2;k++) {
        int op1=rec(x1,y1,k,y2),op2=rec(k+1,y1,x2,y2);
        ret=min(ret,sm+op1+op2);
    }
    for (int k=y1;k<y2;k++) {
        int op1=rec(x1,y1,x2,k),op2=rec(x1,k+1,x2,y2);
        ret=min(ret,sm+op1+op2);
    }
    return ret;
}
signed main(){
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
    int tt=1;//cin>>tt;
    while(tt--) {
        cin>>n>>m;
        f1(n)f3(m)cin>>a[i+1][j+1];
        memset(dp,-1,sizeof dp);
        cout<<rec(1,1,n,m);
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...