Submission #1188725

#TimeUsernameProblemLanguageResultExecution timeMemory
1188725petezaRaisins (IOI09_raisins)C++20
100 / 100
411 ms53596 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int n, m; ll dp[51][51][51][51]; ll sc[51][51]; ll getqs(int i1, int j1, int i2, int j2) { return sc[i2][j2] - sc[i1-1][j2] - sc[i2][j1-1] + sc[i1-1][j1-1]; } ll rec(int i1, int j1, int i2, int j2) { ll &cdp = dp[i1][j1][i2][j2]; if(~cdp) return cdp; cdp = LLONG_MAX; ll cqs = getqs(i1,j1,i2,j2); for(int ik=i1;ik<i2;ik++) cdp = min(cdp, cqs+rec(i1,j1,ik,j2)+rec(ik+1,j1,i2,j2)); for(int jk=j1;jk<j2;jk++) cdp = min(cdp, cqs+rec(i1,j1,i2,jk)+rec(i1,jk+1,i2,j2)); return cdp; } int main() { // your code goes here cin >> n >> m; for(int i=1;i<=n;i++ ) { for(int j=1;j<=m;j++) { cin >> sc[i][j]; sc[i][j] = sc[i][j] + sc[i-1][j] + sc[i][j-1] - sc[i-1][j-1]; } } memset(dp, -1, sizeof dp); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) dp[i][j][i][j]=0; cout << rec(1,1,n,m); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...