Submission #1194153

#TimeUsernameProblemLanguageResultExecution timeMemory
1194153SulARaisins (IOI09_raisins)C++20
100 / 100
67 ms34628 KiB
#include <bits/stdc++.h> #define all(a) a.begin(), a.end() #define popcount(x) __builtin_popcountll(x) using namespace std; using namespace chrono; long long pref[51][51], dp[51][51][51][51]; void solve() { int n,m; cin >> n >> m; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { cin >> pref[i][j]; dp[i][j][i][j] = pref[i][j]; pref[i][j] += pref[i][j-1] + pref[i-1][j] - pref[i-1][j-1]; } } for (int i = n; i >= 1; i--) for (int j = m; j >= 1; j--) for (int k = i; k <= n; k++) for (int l = j; l <= m; l++) { if (i == k && j == l) continue; dp[i][j][k][l] = 1e18; for (int split = i; split < k; split++) dp[i][j][k][l] = min(dp[i][j][k][l], dp[i][j][split][l] + dp[split+1][j][k][l]); for (int split = j; split < l; split++) dp[i][j][k][l] = min(dp[i][j][k][l], dp[i][split + 1][k][l] + dp[i][j][k][split]); dp[i][j][k][l] += pref[k][l] - pref[i-1][l] - pref[k][j-1] + pref[i-1][j-1]; // printf("%d %d %d %d %d\n", i, j, k, l, dp[i][j][k][l]); } cout << dp[1][1][n][m] - pref[n][m]; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); // int t; cin >> t; while (t--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...