Advertisement
S_Aditya

Untitled

Jun 6th, 2025
433
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.56 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 (1 based indexing)
  29.   vector<int> a(n + 1);
  30.  
  31.   for (int i = 1; i <= n; i++) {
  32.     cin >> a[i];
  33.   }
  34.  
  35.   int INF = n + 2;
  36.   vector<vector<int>> dp(
  37.       n + 1, vector<int>(k + 1, INF)); // dp[i][j] = smallest subset with sum =
  38.                                        // j from the first i elements
  39.  
  40.   dp[0][0] = 0; // Empty subset
  41.  
  42.   for (int i = 1; i <= n; i++) {
  43.     // starting from k - a[i] as we add a[i] to each subset
  44.     for (int j = 0; j <= k; j++) {
  45.       if (dp[i - 1][j] != INF) {
  46.         dp[i][j] =
  47.             min(dp[i][j],
  48.                 dp[i - 1][j]); // skip adding a[i] in existing subset with sum j
  49.         if (j + a[i] <= k) {
  50.           dp[i][j + a[i]] =
  51.               min(dp[i][j + a[i]],
  52.                   dp[i - 1][j] + 1); // try adding a[i] in a subset with sum j
  53.         }
  54.       }
  55.     }
  56.   }
  57.  
  58.   if (dp[n][k] == INF) {
  59.     cout << "Answer doesn't exist" << endl;
  60.   } else {
  61.     cout << dp[n][k] << endl;
  62.   }
  63.  
  64.   return 0;
  65. }
  66.  
  67. int main() {
  68.   int t = 1;
  69.   cin >> t;
  70.  
  71.   while (t--) {
  72.     solve();
  73.   }
  74.  
  75.   return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement