Advertisement
S_Aditya

Untitled

Jun 6th, 2025
452
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. #include <algorithm>
  2. #include <cassert>
  3. #include <climits>
  4. #include <cmath>
  5. #include <cstring>
  6. #include <iomanip>
  7. #include <iostream>
  8. #include <limits>
  9. #include <map>
  10. #include <queue>
  11. #include <set>
  12. #include <stack>
  13. #include <string>
  14. #include <unordered_map>
  15. #include <unordered_set>
  16. #include <vector>
  17. #define ll long long
  18. const int N = 5e3 + 4;
  19. const int MOD = 1e9 + 7;
  20.  
  21. using namespace std;
  22.  
  23. int solve() {
  24.   // Your solution logic here
  25.   int n, k;
  26.   cin >> n >> k;
  27.  
  28.   // Array of +ve integers
  29.   vector<int> a(n);
  30.  
  31.   for (int i = 0; i < n; i++) {
  32.     cin >> a[i];
  33.   }
  34.  
  35.   int INF = n + 2;
  36.   vector<int> dp(k + 1, INF); // dp[i] = smallest subset with sum = i
  37.  
  38.   dp[0] = 0; // Empty subset
  39.  
  40.   for (int i = 0; i < n; i++) {
  41.     // starting from k - a[i] as we add a[i] to each subset
  42.     for (int j = k - a[i]; j >= 0; j--) {
  43.       if (dp[j] != INF) {
  44.         dp[j + a[i]] = min(dp[j + a[i]], dp[j] + 1); // try adding a[i] in a subset with sum j
  45.       }
  46.     }
  47.   }
  48.  
  49.   if (dp[k] == INF) {
  50.     cout << "Answer doesn't exist" << endl;
  51.   } else {
  52.     cout << dp[k] << endl;
  53.   }
  54.  
  55.   return 0;
  56. }
  57.  
  58. int main() {
  59.   int t = 1;
  60.   cin >> t;
  61.  
  62.   while (t--) {
  63.     solve();
  64.   }
  65.  
  66.   return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement