tien_noob

Elevator Rides - DP

May 26th, 2021 (edited)
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define task "TESTCODE"
  3. using namespace std;
  4. int n, w[21], dp[1 << 20][2], x;
  5. void read()
  6. {
  7.    cin >> n >> x;
  8.    for (int i = 0; i < n; ++ i)
  9.    {
  10.        cin >> w[i];
  11.    }
  12.    for (int i = 0; i < (1 << n); ++ i)
  13.    {
  14.        dp[i][0] = 1e9;
  15.        dp[i][1] = 1e9;
  16.    }
  17.    dp[0][0] = 0;
  18.    dp[0][1] = 0;
  19. }
  20. void solve()
  21. {
  22.    for (int i = 0; i < (1 << n); ++ i)
  23.    {
  24.        for (int j = 0; j < n; ++ j)
  25.        {
  26.            if (!(i & (1 << j)))
  27.            {
  28.                int tmp1 = dp[i][0], tmp2 = dp[i][1] + w[j];
  29.                if (tmp2 > x)
  30.                {
  31.                    ++tmp1;
  32.                    tmp2 = w[j];
  33.                }
  34.                if (tmp1 < dp[i | (1 << j)][0])
  35.                {
  36.                    dp[i | (1 << j)][0] = tmp1;
  37.                    dp[i | (1 << j)][1] = tmp2;
  38.                }
  39.                else if (tmp1 == dp[i | (1 << j)][0])
  40.                {
  41.                    dp[i | (1 << j)][1] = min(dp[i | (1 << j)][1], tmp2);
  42.                }
  43.            }
  44.        }
  45.    }
  46.    cout << dp[(1 << n) - 1][0] + 1;
  47. }
  48. int main()
  49. {
  50.     ios_base::sync_with_stdio(false);
  51.     cin.tie(nullptr);
  52.     //freopen(task".INP", "r", stdin);
  53.     //freopen(task".OUT", "w", stdout);
  54.     int t = 1;
  55.     bool typetest =false;
  56.     if (typetest)
  57.     {
  58.         cin >> t;
  59.     }
  60.     for (int _ = 1; _ <= t; ++ _ )
  61.     {
  62.         read();
  63.         solve();
  64.     }
  65.     return 0;
  66. }
  67.  
Add Comment
Please, Sign In to add comment