Advertisement
Guest User

Raisins

a guest
Jun 18th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.06 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int MAXN = 52;
  6. const int INF = 1000000007;
  7.  
  8. int n, m;
  9. int a[MAXN][MAXN], p[MAXN][MAXN];
  10. int dp[MAXN][MAXN][MAXN][MAXN];
  11.  
  12. inline int get (int x1, int y1, int x2, int y2) {
  13. return p[x2][y2] - p[x1-1][y2] - p[x2][y1-1] + p[x1-1][y1-1];
  14. }
  15.  
  16. int f (int x1, int y1, int x2, int y2) {
  17. if (dp[x1][y1][x2][y2] != -1) return dp[x1][y1][x2][y2];
  18. if (x1 == x2 && y1 == y2) return 0;
  19. int res = INF;
  20. int sum = get(x1, y1, x2, y2);
  21. for (int i = x1; i < x2; i++) {
  22. res = min(res, sum + f(x1, y1, i, y2) + f(i+1, y1, x2, y2));
  23. }
  24. for (int i = y1; i < y2; i++) {
  25. res = min(res, sum + f(x1, y1, x2, i) + f(x1, i+1, x2, y2));
  26. }
  27. dp[x1][y1][x2][y2] = res;
  28. return res;
  29. }
  30.  
  31. int main () {
  32. memset(dp, -1, sizeof dp);
  33. cin >> n >> m;
  34. for (int i=1; i<=n; i++) {
  35. for (int j=1; j<=m; j++) {
  36. cin >> a[i][j];
  37. p[i][j] = a[i][j] + p[i-1][j] + p[i][j-1] - p[i-1][j-1];
  38. }
  39. }
  40. cout << f(1, 1, n, m);
  41. return 0;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement