This is my solution link Solution
#include <stdio.h>;
#include ;
using namespace std;
void countsort(int k[],int maxim, int ksize);
bool searcher(int ks[],int tobesearched,int start);
int main(){
int testcases,n,m,input;
scanf("%d",&testcases);
while(testcases–){
scanf("%d%d",&n,&m);
int t=0,tempres=0;
int A[20] = {1001,1001,1001,1001,1001,1001,1001,1001,1001,1001,1001,1001,1001,1001,1001,1001,1001,1001,1001,1001};
for(int dfs=0;dfs<n;dfs++){
scanf("%d",&input);
if(input==m){tempres=1;}
if(input<m){
A[t]=input;
t++;
}
}
if(m==0){cout << "Yes" << endl;}else{
if(t==0){cout << "No" << endl;}else{
if(tempres==1){cout << "Yes" << endl;}
else{
countsort(A,1001,20);
if(searcher(A,m,t-1)==true){cout << "Yes" << endl;}else{cout << "No" << endl;}
}}
}}}
bool searcher(int ks[],int tobesearched,int start){
if(start==0){
if(ks[start]==tobesearched){
return true;
}else{return false;}
}else{
if(ks[start]==tobesearched){
return true;
}else{if(ks[start]<tobesearched){
bool ress=false;
for(int sd=start-1;sd>=0;sd–){
if (ress==true){break;}
ress = ress || searcher(ks,tobesearched-ks[start],sd);
}
if(ress==false){
searcher(ks,tobesearched,start-1);
}else{return true;}
}else{searcher(ks,tobesearched,start-1);}
}
}}
void countsort(int k[],int maxim, int ksize){
char ks[maxim];
for (int x=0;x<maxim;x++){
ks[x]=‘a’;
}
for (int jf=0;jf<ksize;jf++){
ks[k[jf]-1]++;
}
int ksd=0;
for (int js=0;js<maxim;js++){
while(ks[js]!=‘a’){
k[ksd]=js+1;
ksd++;
ks[js]–;
}
}}
Sorting function works perfectly fine. I have used it in other problems too. The problem must be in other part.
This is my code…
Please give me some inputs on which it gives wrong answer.