Advertisement
wym1111

Untitled

Aug 16th, 2024
743
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.86 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. using ll = long long;
  6. #define endl '\n'
  7.  
  8. const int N = 3e3 + 10;
  9. const int sz = 10;
  10. const double eps = 1e-3;
  11. const int INF = 0x3f3f3f3f;
  12.  
  13. int v[sz];
  14. int n, m;
  15. struct str {
  16.     int a, b;
  17.     double val;
  18. } stone[N];
  19.  
  20. void init () {
  21.     for (int i = 0; i < sz; i ++) {
  22.         cin >> v[i];
  23.     }
  24.     cin >> n >> m;
  25.     for (int i = 1; i <= n; i ++) {
  26.         int a, b;
  27.         double c;
  28.         cin >> a >> b;
  29.         c = (double)b / double(a);
  30.         stone[i] = {a, b, c};
  31.     }
  32. }
  33.  
  34. vector<pair<int, int>> vec;
  35. void pre () {
  36.     vec.clear();
  37.     for (int i = 1; i <= n; i ++) {
  38.         auto [a, b, val] = stone[i];
  39.         for (int i = 0; i < 13; i ++) {
  40.             int cura = a << i, curb = b << i;
  41.             if (cura > m || curb > m) break;
  42.             vec.push_back({cura, curb});
  43.         }
  44.     }
  45. }
  46.  
  47. int dp[N];
  48. int f[N];
  49. void solve() {
  50.     init();
  51.     pre();
  52.     for (int i = 1; i <= m; i ++) {
  53.         dp[i] = -INF;
  54.         f[i] = -INF;
  55.     }
  56.    
  57.     for (auto [a, b]: vec) {
  58. //      cout << "debug: " << a << ' ' << b << endl;
  59.         for (int i = m; i >= a; i --) {
  60.             dp[i] = max(dp[i], dp[i - a] + b);
  61.         }
  62.     }
  63.    
  64.     vector<pair<int, int>> vect;
  65.     for (int i = 1; i <= m; i ++) {
  66.         if (dp[i] <= 0) continue;
  67.         int k = (dp[i] * 10 - 1) / i;
  68.         int val = v[k];
  69. //      cout << "debug: " << dp[i] << ' ' << i << ' ' << k << ' ' << val << endl;
  70.         for (int j = 0; (i << j) <= m; j ++) {
  71.             vect.push_back({(i << j), (i << j) * val});
  72.         }
  73.     }
  74.    
  75. //  return;
  76.    
  77.     for (auto [v, w]: vect) {
  78. //      cout << v << ' ' << w << endl;
  79.         for (int j = m; j >= v; j --) {
  80.             f[j] = max(f[j], f[j - v] + w);
  81.         }
  82.     }
  83.    
  84.     int ans = 0;
  85.     for (int i = 1; i <= m; i ++) {
  86. //      if (f[i] > 0) cout << i << ' ' << f[i] << endl;
  87.         ans = max(ans, f[i]);
  88.     }
  89.     cout << ans << endl;
  90. }
  91.  
  92. int main() {
  93. //  pre();
  94.    
  95.     ios::sync_with_stdio(false);
  96.     cin.tie(nullptr);
  97.     int _ = 1;
  98.     cin >> _;
  99.     while (_--)
  100.         solve();
  101.     return 0;
  102. }
  103.  
  104. /*
  105.   1
  106.   3
  107.   1 2
  108.   2 3
  109.  */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement