Submission #374689

#TimeUsernameProblemLanguageResultExecution timeMemory
374689Christopher_RdzRaisins (IOI09_raisins)C++17
100 / 100
1186 ms26112 KiB
#include <bits/stdc++.h> using namespace std; #define MAX 51 int memo[MAX][MAX][MAX][MAX]; int t[MAX][MAX]; int suma(int i, int j, int a, int b){ return t[a][b] - t[a][j - 1] - t[i - 1][b] + t[i - 1][j - 1]; } int dp(int i, int j, int a, int b){ if (i == a and j == b){ return 0; }else{ if (memo[i][j][a][b] == 1000000000){ for (int k = i; k < a; k++){ memo[i][j][a][b] = min(memo[i][j][a][b], dp(i, j, k, b) + dp(k + 1, j, a, b) + suma(i, j, a, b)); } for (int c = j; c < b; c++){ memo[i][j][a][b] = min(memo[i][j][a][b], dp(i, j, a, c) + dp(i, c + 1, a, b) + suma(i, j, a, b)); } } return memo[i][j][a][b]; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n, m; cin >> n >> m; for (int i = 1; i <= n; i++){ for (int j = 1; j <= m; j++){ cin >> t[i][j]; t[i][j] += t[i][j - 1] + t[i - 1][j] - t[i - 1][j - 1]; } } for (int i = 1; i <= 50; i++){ for (int j = 1; j <= 50; j++){ for (int a = 1; a <= 50; a++){ for (int b = 1; b <= 50; b++){ memo[i][j][a][b] = 1000000000; } } } } cout << dp(1, 1, n, m); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...