如何做拼多多商城官网站/广东省疫情最新
穷举搜索
现有长度为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;
}