fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll long long
  6. #define ull unsigned ll
  7. #define ld long double
  8. typedef vector<int> vi;
  9. typedef multiset<int> mi;
  10. typedef multiset<ll> mll;
  11. typedef vector<ll> vll;
  12. typedef vector<bool> vb;
  13. typedef vector<string> vs;
  14. typedef set<ll> sll;
  15. typedef vector<vector<int>> _2vi;
  16. typedef vector<vector<ll>> _2vll;
  17. #define all(v) ((v).begin()), ((v).end())
  18. #define sz(v) ((ll)((v).size()))
  19.  
  20. #define vinp(v, n) \
  21.   for (ull i = 0; i < (n); i++) \
  22.   cin >> (v)[i]
  23. #define printv(v) \
  24.   for (auto i : (v)) \
  25.   cout << i << " "
  26. #define fr0(i, n) for (ull(i) = 0; (i) < (n); (i)++)
  27. #define fr1(i, n) for (ull(i) = 1; (i) < (n); (i)++)
  28. #define fr(i, x, n) for (ull(i) = (x); (i) < (n); (i)++)
  29. #define _CRT_SECURE_NO_WARNING
  30. const ll MOD = 1000000007;
  31.  
  32. void Bustany() {
  33. ios_base::sync_with_stdio(false);
  34. cin.tie(NULL);
  35. cout.tie(NULL);
  36. #ifndef ONLINE_JUDGE
  37. freopen("./in.txt", "r", stdin), freopen("./out.txt", "w", stdout);
  38. #endif
  39. }
  40.  
  41. const ll N = 3e2 + 5;
  42. vector<sll> adj(N);
  43. //_2vll adj(N,vll(N));
  44. vb vis;
  45. ll dp[N][N];
  46. vll v;
  47. ll cost[N][N];
  48.  
  49. ll n, k;
  50.  
  51. ll fun(ll l, ll r) {
  52. if (l >= r) {
  53. return 0;
  54. }
  55. ll &res = cost[l][r];
  56. ll mid = (l + r) / 2;
  57. res = 0;
  58. fr(i, l, r + 1) {
  59. res += abs(v[i] - v[mid]);
  60. }
  61. fun(l + 1, r);
  62. fun(l, r - 1);
  63. return res;
  64. }
  65.  
  66.  
  67. void solve() {
  68. cin >> n >> k;
  69. v.assign(n, {});
  70. memset(cost, 0, sizeof(cost));
  71. vinp(v, n);
  72. sort(all(v));
  73. for (ll l = 0; l < n; l++) {
  74. for (ll r = l; r < n; r++) {
  75. ll mid = (l + r) / 2;
  76. for (ll i = l; i <= r; i++) {
  77. cost[l][r] += abs(v[i] - v[mid]);
  78. }
  79. }
  80. }
  81. for (ll i = 0; i < n; i++) {
  82. dp[1][i] = cost[0][i];
  83. }
  84. if (dp[1][n - 1] <= k) {
  85. cout << 1 << endl;
  86. return;
  87. }
  88. for (ll s = 2; s <= n; s++) {
  89. for (ll i = 0; i < n; i++) {
  90. dp[s][i] = 1e18;
  91. for (ll j = 0; j < i; j++) {
  92. dp[s][i] = min(dp[s][i], dp[s - 1][j] + cost[j + 1][i]);
  93. if (i == n - 1 && dp[s][i] <= k) {
  94. cout << s << endl;
  95. return;
  96. }
  97. }
  98. }
  99. }
  100. }
  101.  
  102.  
  103. int main() {
  104. Bustany();
  105. ll t = 1;
  106. cin >> t;
  107. while (t--) {
  108. solve();
  109. }
  110. }
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
1