思路:首先所有能称出的重量均在0~10000之间
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>
#include <map>
#include <queue>
#include <cstdio>
#include <string>
#include <stack>
#include <set>
#define IOS ios::sync_with_stdio(false), cin.tie(0)
using namespace std;
typedef long long ll;
namespace ak{
//dp[i][j]前i个石子能否称出j的重量
int dp[110][10010];
int n,m,k;
int a[110];
//核心dp
void getdp(){
memset(dp,0,sizeof(dp));
dp[0][0]=1;
for(int i=1;i<=n;i++){
//所有可能称出的重量不可能超过10000;
for(int j=0;j<=10000;j++){
if(dp[i-1][j]){//如果前i-1个石子能称出j的重量
dp[i][j]=1;//不放该石子
dp[i][j+a[i]]=1;//放叠加的一边
dp[i][abs(j-a[i])]=1;//放抵消的一边
}
}
}
}
void query(){
cin>>m;
while(m--){
cin>>k;
if(k<=10000&&dp[n][k]){
cout<<"YES"<<endl;
}
else cout<<"NO"<<endl;
}
}
void work(){
while(cin>>n){
for(int i=1;i<=n;i++){
cin>>a[i];
}
getdp();
query();
}
}
}
int main(){
IOS;
ak::work();
getchar();
getchar();
return 0;
}