Advertisement
Guest User

coin change

a guest
Jul 23rd, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.40 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5. long long int n,k,t,i,j,k1,l,sum,left,l1,o,p,right,c,f,mid,d,diff;
  6. cin>>t;
  7. for(i=1; i<=t; i++)
  8. {
  9. cin>>n>>k;
  10. long long int a[n+2];
  11. for(j=0; j<n; j++)
  12. {
  13. cin>>a[j];
  14. }
  15. o=n/2;
  16. p=pow(2,o);
  17. d=pow(2,n);
  18.  
  19. l=0;
  20. l1=0;
  21.  
  22. vector<long long int>s,s1;
  23. c=0;
  24.  
  25. for(j=0; j<p; j++)
  26. {
  27. for(k1=0,sum=0; k1<o; k1++)
  28. {
  29. if(j & (1<<k1))
  30. {
  31. sum=sum+a[k1];
  32. }
  33. }
  34.  
  35. if(sum<k)
  36. {
  37. s.push_back(sum);
  38. if(sum*2<k)
  39. s.push_back(sum*2);
  40. }
  41. if(sum==k || sum*2==k)
  42. {
  43. c=1;
  44. break;
  45. }
  46.  
  47.  
  48. }
  49. for(j=o; j<d; j++)
  50. {
  51. for(k1=o,sum=0; k1<n; k1++)
  52. {
  53. if(j & (1<<k1))
  54. {
  55. sum=sum+a[k1];
  56. }
  57. }
  58.  
  59. if(sum<k)
  60. {
  61. s1.push_back(sum);
  62. if(sum*2<k)
  63. s1.push_back(sum*2);
  64.  
  65. }
  66. if(sum==k || sum*2==k)
  67. {
  68. c=1;
  69. break;
  70. }
  71.  
  72. }
  73.  
  74. //sort(s.begin(),s.end());
  75. sort(s1.begin(),s1.end());
  76. l=s.size();
  77. l1=s1.size();
  78. if(c==0)
  79. {
  80. for(j=0; j<l; j++)
  81. {
  82. diff=k-s[j];
  83. left=0;
  84. right=l1-1;
  85. while(left<=right)
  86. {
  87. mid=(left+right)/2;
  88. if(s1[mid]==diff)
  89. {
  90. c=1;
  91. break;
  92. }
  93. else if(s1[mid]<diff)
  94. {
  95. left=mid+1;
  96. }
  97. else
  98. {
  99. right=mid-1;
  100. }
  101. }
  102. if(c==1)
  103. break;
  104.  
  105. }
  106. }
  107. cout<<"Case "<<i<<": ";
  108. if(c==1)
  109. cout<<"Yes"<<endl;
  110. else
  111. cout<<"No"<<endl;
  112. }
  113. return 0;
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement