Josif_tepe

Untitled

Mar 11th, 2026
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <set>
  5. #include <cstring>
  6. #include <fstream>
  7. using namespace std;
  8. typedef long long ll;
  9. const int maxn = 20;
  10. int n;
  11. ll k;
  12. int mat[maxn][3];
  13. const ll INF = 1e18;
  14. ll total_weght[1 << maxn];
  15. ll total_height[1 << maxn];
  16. ll dp[1 << maxn];
  17. ll rec(int bitmask) {
  18.     if(bitmask == 0) {
  19.         return INF;
  20.     }
  21.     if(dp[bitmask] != -1) {
  22.         return dp[bitmask];
  23.     }
  24.    
  25.     ll res = -1;
  26.     for(int i = 0; i < n; i++) {
  27.         if(bitmask & (1 << i)) {
  28.             int above_cows = bitmask ^ (1 << i);
  29.             ll weight_above = total_weght[above_cows];
  30.            
  31.             ll capacity_left = mat[i][2] - weight_above;
  32.             if(capacity_left >= 0) {
  33.                 ll res2 = rec(above_cows);
  34.                 if(res2 >= 0) {
  35.                     res = max(res, min(capacity_left, res2));
  36.                 }
  37.             }
  38.         }
  39.     }
  40.     dp[bitmask] = res;
  41.     return res;
  42. }
  43. int main()
  44. {
  45.     ifstream cin("guard.in");
  46.     ofstream cout("guard.out");
  47.     ios_base::sync_with_stdio(false);
  48.     cin >> n >> k;
  49.     memset(dp, -1, sizeof dp);
  50.     for(int i = 0; i < n; i++) {
  51.         cin >> mat[i][0] >> mat[i][1] >> mat[i][2];
  52.     }
  53.    
  54.     for(int bitmask = 0; bitmask < (1 << n); bitmask++) {
  55.         total_weght[bitmask] = 0;
  56.         total_height[bitmask] = 0;
  57.        
  58.         for(int i = 0; i < n; i++) {
  59.             if(bitmask & (1 << i)) {
  60.                 total_weght[bitmask] += mat[i][1];
  61.                 total_height[bitmask] += mat[i][0];
  62.             }
  63.         }
  64.     }
  65.    
  66.     ll res = -1;
  67.     for(int bitmask = 0; bitmask < (1 << n); bitmask++) {
  68.         if(total_height[bitmask] >= k) {
  69.             res = max(res, rec(bitmask));
  70.            
  71.         }
  72.     }
  73.    
  74.     if(res < 0) {
  75.         cout << "Mark is too tall" << endl;
  76.     }
  77.     else {
  78.         cout << res << endl;
  79.     }
  80.     return 0;
  81. }
  82.  
Advertisement
Add Comment
Please, Sign In to add comment