Submission #1209352

#TimeUsernameProblemLanguageResultExecution timeMemory
1209352InternetPerson10Raisins (IOI09_raisins)C++20
100 / 100
404 ms22080 KiB
#include <bits/stdc++.h> typedef long long ll; using namespace std; int a[51][51]; int dp[51][51][51][51]; int su[51][51]; int pref(int r1, int c1, int r2, int c2) { return su[r2][c2] - su[r2][c1] - su[r1][c2] + su[r1][c1]; } int calc(int r1, int c1, int r2, int c2) { if(dp[r1][c1][r2][c2] != -1) return dp[r1][c1][r2][c2]; if(r1 == r2 - 1 && c1 == c2 - 1) return dp[r1][c1][r2][c2] = 0; int ans = 999999999; for(int r = r1 + 1; r < r2; r++) { ans = min(ans, calc(r1, c1, r, c2) + calc(r, c1, r2, c2)); } for(int c = c1 + 1; c < c2; c++) { ans = min(ans, calc(r1, c1, r2, c) + calc(r1, c, r2, c2)); } return dp[r1][c1][r2][c2] = ans + pref(r1, c1, r2, c2); } int main() { ios::sync_with_stdio(false); cin.tie(0); int r, c; cin >> r >> c; for(int i = 0; i <= r; i++) { for(int j = 0; j <= c; j++) { su[i][j] = 0; } } for(int i = 0; i < r; i++) { for(int j = 0; j < c; j++) { cin >> a[i][j]; su[i+1][j+1] = su[i+1][j] + su[i][j+1] - su[i][j] + a[i][j]; } } for(int i = 0; i <= r; i++) { for(int j = i; j <= r; j++) { for(int k = 0; k <= c; k++) { for(int l = k; l <= c; l++) { dp[i][k][j][l] = -1; } } } } cout << calc(0, 0, r, c) << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...