Advertisement
ivnikkk

Untitled

Jan 31st, 2022
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.97 KB | None | 0 0
  1. #pragma GCC optimize("03")
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #include "bits/stdc++.h"
  4. //#include "geometry.h"
  5. //#include "data_structure"
  6. using namespace std;
  7. using namespace chrono;
  8. #define all(a) a.begin(), a.end()
  9. #define allr(a) a.rbegin(), a.rend()
  10. mt19937 rnd(std::chrono::high_resolution_clock::now().time_since_epoch().count());
  11. typedef long long ll;
  12. typedef long double ld;
  13. signed main() {
  14. #ifdef _DEBUG
  15.     freopen("input.txt", "r", stdin);
  16.     freopen("output.txt", "w", stdout);
  17. #endif
  18.     srand(time(NULL));
  19.     ios_base::sync_with_stdio(false);
  20.     cin.tie(nullptr);
  21.     cout.tie(nullptr);
  22.     //cout << fixed << setprecision(8);
  23.     ll t = 1;
  24.     ll inf = 1e9;
  25.     vector<ll> dist(1e5, inf);
  26.     dist[1] = 0;
  27.     dist[2] = 1;
  28.     for (ll i = 2; i <= 1e3; i++) {
  29.         ll d = i;
  30.         for (ll j = 2; j * j <= d; j++) {
  31.             dist[i + j] = min(dist[i] + 1, dist[i + j]);
  32.             dist[i + i / j] = min(dist[i + i / j], dist[i] + 1);
  33.         }
  34.         dist[i + 1] = min(dist[i + 1], dist[i] + 1);
  35.         dist[i + i] = min(dist[i + i], dist[i] + 1);
  36.     }
  37.    /* ll mn = -1e18;
  38.     for (ll i = 1; i <= 1000; i++) {
  39.         mn = max(dist[i], mn);
  40.     }
  41.     cout << mn << endl;*/
  42.     cin >> t;
  43.     while (t--) {
  44.         ll n, k;
  45.         cin >> n >> k;
  46.         vector<ll> a(n), c(n);
  47.         ll sum = 0;
  48.         for (ll i = 0; i < n; i++) {
  49.             ll k;
  50.             cin >> k;
  51.             a[i] = dist[k];
  52.             sum += a[i];
  53.         }
  54.         for (ll i = 0; i < n; i++) {
  55.             cin >> c[i];
  56.         }
  57.         vector<vector<ll>> dp(n+1, vector<ll>(min(k, 12 * (n)) +1, 0));
  58.         for (ll i = 1; i <= n; i++) {
  59.             for (ll j = 0; j <= min(k,12*(n)); j++) {
  60.                 dp[i][j] = dp[i - 1][j];
  61.                 if (a[i-1] <= j) {
  62.                     dp[i][j] = max(dp[i][j], dp[i - 1][j - a[i-1]] + c[i-1]);
  63.                 }
  64.             }
  65.         }
  66.         cout << dp[n][min(k, 12 * (n))] <<'\n';
  67.     }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement