Advertisement
S_Aditya

Untitled

Mar 24th, 2021
490
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.88 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #include <ext/pb_ds/assoc_container.hpp>
  3. #include <ext/pb_ds/tree_policy.hpp>
  4. using namespace __gnu_pbds;
  5. using namespace std;
  6. typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
  7. #define ll long long
  8. #define scn(n) scanf("%d",&n)
  9. #define lscn(n) scanf("%lld",&n)
  10. #define lpri(n) printf("%lld",n)
  11. #define pri(n) printf("%d",n)
  12. #define pln() printf("\n")
  13. #define priln(n) printf("%d\n",n)
  14. #define lpriln(n) printf("%lld\n",n)
  15. #define rep(i,init,n) for(int i=init;i<n;i++)
  16. #define pb push_back    
  17. #define mp make_pair
  18. #define F first
  19. #define S second
  20. #define gcd __gcd
  21. #define inf INT_MAX
  22. #define ninf INT_MIN
  23. const ll mod=1e9+7;        
  24. const int N=1e4+4;
  25. int main()
  26. {
  27.     int t;
  28.    
  29.     scn(t);
  30.    
  31.     //https://www.geeksforgeeks.org/subset-sum-problem-dp-25/(related standard problem)
  32.    
  33.     while(t--)
  34.     {
  35.         int n,x;
  36.        
  37.         scn(n); scn(x);
  38.        
  39.         int a[n],sum=0;
  40.        
  41.         rep(i,1,n+1)
  42.         scn(a[i]),sum+=a[i];
  43.        
  44.         bool dp[n+1][N]; //dp[i][j] is 1 if it is possible to make a sum of j considering a subset first i items
  45.        
  46.         memset(dp,0,sizeof(dp));
  47.        
  48.         rep(i,0,n+1)
  49.         dp[i][0]=1;
  50.        
  51.         rep(i,1,n+1)
  52.         {
  53.             rep(j,1,N)
  54.             {
  55.                 dp[i][j]=dp[i-1][j];
  56.                
  57.                 if(j-a[i]>=0)
  58.                 dp[i][j]|=dp[i-1][j-a[i]];
  59.             }
  60.         }
  61.        
  62.         int mn=inf;
  63.        
  64.         rep(i,0,sum+1)
  65.         if(dp[n-1][i])
  66.         {
  67.             //cout<<i<<" ";
  68.            
  69.             int here=max(i,sum-i);
  70.            
  71.             mn=min(mn,here);
  72.         }
  73.        
  74.         //cout<<endl;
  75.        
  76.         if(mn<=x)
  77.         printf("YES\n");
  78.         else
  79.         printf("NO\n");
  80.     }
  81.    
  82.     return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement