题意:
给你一些砝码,和一些要被称出的重量,如果这些砝码能称出来输出YES,否则输出NO
题解:我们想想,这题求组合方式,我们这里可以直接用母函数艹过去,这里我写的枚举子集的方式,其实就是母函数的形式
#include<cstdio>
#define F(i,a,b) for(int i=a;i<=b;i++)
int abs(int a){return a<?-a:a;}
int a[],dp[][];
int main(){
int t,n,m,sum,x;
scanf("%d",&t);
while(t--){
scanf("%d",&n),sum=;
F(i,,n)scanf("%d",a+i),sum+=a[i];
F(i,,n)F(j,,sum)dp[i][j]=;
dp[][a[]]=;
F(i,,n)dp[i][]=;
F(i,,n)F(j,,sum){
dp[i][j]|=dp[i-][j];
dp[i][j+a[i]]|=dp[i-][j];
dp[i][abs(j-a[i])]|=dp[i-][j];
}
scanf("%d",&m);
while(m--)scanf("%d",&x),dp[n][x]?puts("YES"):puts("NO");
}
return ;
}