// A recursive solution for subset sum problem
#include <stdio.h>
#include <iostream>
using namespace std;
// Returns true if there is a subset of set[] with sun equal to given sum
bool isSubsetSum(int set[], int n, int sum)
{
//cout<<set[n]<<" "<<n<<" "<<sum<<endl; i've printed it to learn what my code is doing
// Base Cases
if (sum == 0)
return true;
if (n == 0 && sum != 0)
return false;
// If last element is greater than sum, then ignore it
if (set[n-1] > sum)
return isSubsetSum(set, n-1, sum);
/* else, check if sum can be obtained by any of the following
(a) including the last element
(b) excluding the last element */
return isSubsetSum(set, n-1, sum) || isSubsetSum(set, n-1, sum-set[n-1]);
}
// Driver program to test above function
int main()
{
int set[100];
int sum;
int a, b;
//int n = sizeof(set)/sizeof(set[0]);
cin>>a;
for(int z=0; z<a; z++) {
int n;
cin>>n>>sum;
for(int k=0; k<n; k++) cin>>set[k];
if (isSubsetSum(set, n, sum) == true)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
Ly8gQSByZWN1cnNpdmUgc29sdXRpb24gZm9yIHN1YnNldCBzdW0gcHJvYmxlbQojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwovLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYSBzdWJzZXQgb2Ygc2V0W10gd2l0aCBzdW4gZXF1YWwgdG8gZ2l2ZW4gc3VtCmJvb2wgaXNTdWJzZXRTdW0oaW50IHNldFtdLCBpbnQgbiwgaW50IHN1bSkKewoJLy9jb3V0PDxzZXRbbl08PCIgIjw8bjw8IiAiPDxzdW08PGVuZGw7IGkndmUgcHJpbnRlZCBpdCB0byBsZWFybiB3aGF0IG15IGNvZGUgaXMgZG9pbmcKICAgLy8gQmFzZSBDYXNlcwogICBpZiAoc3VtID09IDApCiAgICAgcmV0dXJuIHRydWU7CiAgIGlmIChuID09IDAgJiYgc3VtICE9IDApCiAgICAgcmV0dXJuIGZhbHNlOwogCiAgIC8vIElmIGxhc3QgZWxlbWVudCBpcyBncmVhdGVyIHRoYW4gc3VtLCB0aGVuIGlnbm9yZSBpdAogICBpZiAoc2V0W24tMV0gPiBzdW0pCiAgICAgcmV0dXJuIGlzU3Vic2V0U3VtKHNldCwgbi0xLCBzdW0pOwogCiAgIC8qIGVsc2UsIGNoZWNrIGlmIHN1bSBjYW4gYmUgb2J0YWluZWQgYnkgYW55IG9mIHRoZSBmb2xsb3dpbmcKICAgICAgKGEpIGluY2x1ZGluZyB0aGUgbGFzdCBlbGVtZW50CiAgICAgIChiKSBleGNsdWRpbmcgdGhlIGxhc3QgZWxlbWVudCAgICovCiAgIHJldHVybiBpc1N1YnNldFN1bShzZXQsIG4tMSwgc3VtKSB8fCBpc1N1YnNldFN1bShzZXQsIG4tMSwgc3VtLXNldFtuLTFdKTsKfQogCi8vIERyaXZlciBwcm9ncmFtIHRvIHRlc3QgYWJvdmUgZnVuY3Rpb24KaW50IG1haW4oKQp7CiAgaW50IHNldFsxMDBdOwogIGludCBzdW07CiAgaW50IGEsIGI7CiAgLy9pbnQgbiA9IHNpemVvZihzZXQpL3NpemVvZihzZXRbMF0pOwogIGNpbj4+YTsKICBmb3IoaW50IHo9MDsgejxhOyB6KyspIHsKICAJaW50IG47CiAgCWNpbj4+bj4+c3VtOwogIAlmb3IoaW50IGs9MDsgazxuOyBrKyspIGNpbj4+c2V0W2tdOwogIGlmIChpc1N1YnNldFN1bShzZXQsIG4sIHN1bSkgPT0gdHJ1ZSkKICAgICBwcmludGYoIlllc1xuIik7CiAgZWxzZQogICAgIHByaW50ZigiTm9cbiIpOwogIH0KICByZXR1cm4gMDsKfQ==
NQozIDMKMQoxCjEKNSAxMQoxCjIKNAo4CjE2CjUgMjMKMQoyCjQKOAoxNgo1IDEzCjEKNQo1CjEwCjEwCjIwIDEzNwoxNwo2CjQKOTk4CjI1NAoxMzcKMjU5CjE1MwoxNTQKMwoyOAoxOQoxMjMKNTQyCjg1NwoyMwo2ODcKMzUKOTkKOTk5
5
3 3
1
1
1
5 11
1
2
4
8
16
5 23
1
2
4
8
16
5 13
1
5
5
10
10
20 137
17
6
4
998
254
137
259
153
154
3
28
19
123
542
857
23
687
35
99
999