穷举搜索
现有长度为n的数列A和整数m。请编写一个程序:判断A中任意几个元素相加能否得到m。A中的元素只能使用1次。
数列A以及用作问题的q个Mi由外界输入,请对每个问题输出yes或no。
输入:第一行输入n,第二行输入代表A的n个整数,第三行输入q,第四行输入q个整数Mi。
输出:输出各问题的答案,如果A中的元素相加能得到Mi则回答yes,反之回答no。
输入示例:
5
1 5 7 10 21
4
2 4 17 8
输出示例:
no
no
yes
yes
代码如下:
#include<stdio.h>
int n,A[50];
int solve(int i,int j){
if(j==0)return 1;
if(i>=n)return 0;
int res=solve(i+1,j)||solve(i+1,j-A[i]);
return res;
}
int main(){
int q,m;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&A[i]);
}
scanf("%d",&q);
for(int i=0;i<q;i++){
scanf("%d",&m);
if(solve(0,m)){
printf("YES\n");
}
else printf("No\n");
}
return 0;
}