Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <ext/pb_ds/assoc_container.hpp>
  3. #include <ext/pb_ds/tree_policy.hpp>
  4.  
  5. #pragma GCC optimize("Ofast")
  6. //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  7. #pragma GCC optimize("unroll-loops")
  8.  
  9. using namespace std;
  10.  
  11. using namespace __gnu_pbds;
  12. #define hash hui
  13. #define pb push_back
  14. #define F first
  15. #define S second
  16. #define ll long long
  17. #define ld double long
  18. #define ull unsigned long long
  19.  
  20.  
  21. const int N = 1010;
  22. const ll INF = 1e16 + 36;
  23. int n;
  24. //mt19937 gen(chrono::high_resolution_clock::now().time_since_epoch().count());
  25. mt19937 gen(37109);
  26.  
  27.  
  28. signed main() {
  29. ios_base::sync_with_stdio(0);
  30. #ifdef LOCAL
  31. freopen("input.txt", "r", stdin);
  32. freopen("output.txt", "w", stdout);
  33. #else
  34. // freopen("sum.in", "r", stdin);
  35. // freopen("sum.out", "w", stdout);
  36. #endif // LOCAL
  37. int s1, s2;
  38. cin >> n >> s1 >> s2;
  39. ll dp[N][N];
  40. for(int i = 0 ; i < N ; i++) {
  41. for(int j = 0 ; j < N ; j++) {
  42. dp[i][j] = INF;
  43. }
  44. }
  45. dp[0][0] = 0;
  46. vector<array<ll, 4> > x(n);
  47. for(int i = 0 ; i < n ; i++) {
  48. for(int j = 0 ; j < 4 ;j++) cin >> x[i][j];
  49. }
  50. for(int i = 0 ; i < n ; i++) {
  51. for(int j = N - 1 ; j >= 0 ; j--) {
  52. for(int k = N - 1 ; k >= 0 ; k--) {
  53. if(j - x[i][0] >= 0 && j - x[i][0] < s1) {
  54. if(dp[j][k] > dp[j - x[i][0]][k] + x[i][1]) dp[j][k] = dp[j - x[i][0]][k] + x[i][1];
  55. }
  56. if(k - x[i][2] >= 0) {
  57. if(dp[j][k] > dp[j][k - x[i][2]] + x[i][3]) dp[j][k] = dp[j][k - x[i][2]] + x[i][3];
  58. }
  59. }
  60. }
  61. }
  62. ll ans = INF;
  63. for(int i = 0 ; i < N ; i++) {
  64. for(int j = 0 ; j < N ; j++) {
  65. if(i >= s1 && i + j >= s1 + s2 && dp[i][j] < ans) ans = dp[i][j];
  66. }
  67. }
  68. if(ans == INF) cout << -1;
  69. else cout << ans;
  70. return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement