问题描述:
#include <stdio.h>
#define true 1
#define false 0
int A[50],n;
//从输入值中减去所选元素的递归函数
int solve(int i,int m){
int res;
if(m == 0) return true;
if(i >= n) return false;
res = solve(i+1,m)||solve(i+1,m-A[i]);// solve(i+1,m)为了调用递归,solve(i+1,m-A[i])为了结束递归(即m=0时递归结束)
return res; //solve(i,m)为:用第i个元素后面的元素得出m时返回true,m-A[i]表示使用第i个元素
}
int main(){
int q,M,i;
scanf("%d",&n);
for(i = 0; i < n; i++) scanf("%d",&A[i]);
scanf("%d",&q);
for(i = 0;i < q; i++){
scanf("%d",&M);
if(solve(0,M)) printf("yes\n");
else printf("no\n");
}
return 0;
}
分析: