Advertisement
Guest User

Untitled

a guest
Sep 25th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.81 KB | None | 0 0
  1. /*#pragma GCC optimize("Ofast,no-stack-protector")
  2. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  3. #pragma GCC optimize("unroll-loops")
  4. #pragma GCC optimize("fast-math")*/
  5. #include <stdio.h>
  6. #include <bits/stdc++.h>
  7. using namespace std;
  8.  
  9. #define amen ;
  10. #define vec vector
  11. #define pb push_back
  12. #define all(x) x.begin(), x.end()
  13. #define rall(x) x.rbegin(), x.rend()
  14. #define Str(x) to_string(x)
  15. #define len(s) (int)s.size()
  16. #define int long long
  17. typedef long long ll;
  18. typedef double d;
  19. typedef long double lld;
  20. typedef string str;
  21. typedef unsigned long long ull;
  22.  
  23.  
  24. main()
  25. {
  26. ios_base::sync_with_stdio(false);
  27. cin.tie(NULL);
  28. #ifdef LOCAL
  29. freopen("input.txt", "r", stdin);
  30. freopen("output.txt", "w", stdout);
  31. #endif
  32. // SLOW CODE
  33. int n;
  34. cin >> n;
  35. vector <pair<int, int> > v(n);
  36. vector <int> dp(n, 0);
  37. for (int i = 0; i < n; i++)
  38. {
  39. cin >> v[i].first >> v[i].second;
  40. }
  41. sort(all(v));
  42. //reverse(all(v));
  43. for (int i = 0; i < n; i++)
  44. {
  45. int h = v[i].first, w = v[i].second;
  46. dp[i] = h * w + (i ? dp[i-1] : 0);
  47. for (int j = i - 1; j >= 0; j--)
  48. {
  49. dp[i] = min(dp[i], dp[j] + w * h);
  50. h = max(h, v[j].first);
  51. w = max(w, v[j].second);
  52. }
  53. }
  54. int ans = dp[n-1];
  55. fill(all(dp), 0);
  56. for (auto &it : v)
  57. swap(it.first, it.second);
  58. sort(all(v));
  59. for (int i = 0; i < n; i++)
  60. {
  61. int h = v[i].first, w = v[i].second;
  62. dp[i] = h * w + (i ? dp[i-1] : 0);
  63. for (int j = i - 1; j >= 0; j--)
  64. {
  65. dp[i] = min(dp[i], dp[j] + w * h);
  66. h = max(h, v[j].first);
  67. w = max(w, v[j].second);
  68. }
  69. }
  70. cout << min(ans, dp[n-1]);
  71. return 0;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement