Submission #924199

#TimeUsernameProblemLanguageResultExecution timeMemory
924199bananadeRaisins (IOI09_raisins)C++17
100 / 100
156 ms129508 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int dp[55][55][55][55]; int n, m; int arr[55][55]; int ARR[55][55][55][55]; int pref[55][55]; int DP(int a, int b, int c, int d) { if(dp[a][b][c][d] != -1) { return dp[a][b][c][d]; } int mini = 1e9; for(int i = a; i < b; i++) { mini = min(mini, DP(a, i, c, d) + DP(i + 1, b, c, d)); } for(int i = c; i < d; i++) { mini = min(mini, DP(a, b, c, i) + DP(a, b, i + 1, d)); } mini += pref[b][d] + pref[a - 1][c - 1] - pref[b][c - 1] - pref[a - 1][d]; //cout << mini << " " << a << " " << b << " " << c << " " << d << "\n"; return dp[a][b][c][d] = mini; } signed main() { ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); cin >> n >> m; memset(dp, -1, sizeof(dp)); for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { cin >> arr[i][j]; dp[i][i][j][j] = 0; ARR[i][i][j][j] = arr[i][j]; } } for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { pref[i][j] = pref[i - 1][j] + pref[i][j - 1] - pref[i - 1][j - 1] + arr[i][j]; } } cout << DP(1, n, 1, m) << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...