hdu_5616_Jam's balance(暴力枚举子集||母函数)
题意:
给你一些砝码,和一些要被称出的重量,如果这些砝码能称出来输出YES,否则输出NO
题解:我们想想,这题求组合方式,我们这里可以直接用母函数艹过去,这里我写的枚举子集的方式,其实就是母函数的形式
1 #include<cstdio> 2 #define F(i,a,b) for(int i=a;i<=b;i++) 3 int abs(int a){return a<0?-a:a;} 4 int a[30],dp[25][2511]; 5 int main(){ 6 int t,n,m,sum,x; 7 scanf("%d",&t); 8 while(t--){ 9 scanf("%d",&n),sum=0; 10 F(i,1,n)scanf("%d",a+i),sum+=a[i]; 11 F(i,0,n)F(j,0,sum)dp[i][j]=0; 12 dp[1][a[1]]=1; 13 F(i,1,n)dp[i][0]=1; 14 F(i,2,n)F(j,0,sum){ 15 dp[i][j]|=dp[i-1][j]; 16 dp[i][j+a[i]]|=dp[i-1][j]; 17 dp[i][abs(j-a[i])]|=dp[i-1][j]; 18 } 19 scanf("%d",&m); 20 while(m--)scanf("%d",&x),dp[n][x]?puts("YES"):puts("NO"); 21 } 22 return 0; 23 }