hdu_5616_Jam's balance(暴力枚举子集||母函数)

来源:互联网 发布:prim和kruskal算法 编辑:程序博客网 时间:2024/05/29 18:54

题目连接:hdu_5616_Jam's balance

题意:

给你一些砝码,和一些要被称出的重量,如果这些砝码能称出来输出YES,否则输出NO

题解:我们想想,这题求组合方式,我们这里可以直接用母函数艹过去,这里我写的枚举子集的方式,其实就是母函数的形式


#include<cstdio>#define F(i,a,b) for(int i=a;i<=b;i++)int abs(int a){return a<0?-a:a;}int a[30],dp[25][2511];int main(){int t,n,m,sum,x;scanf("%d",&t);while(t--){scanf("%d",&n),sum=0;F(i,1,n)scanf("%d",a+i),sum+=a[i];F(i,0,n)F(j,0,sum)dp[i][j]=0;dp[1][a[1]]=1;F(i,1,n)dp[i][0]=1;F(i,2,n)F(j,0,sum){dp[i][j]|=dp[i-1][j];dp[i][j+a[i]]|=dp[i-1][j];dp[i][abs(j-a[i])]|=dp[i-1][j];}scanf("%d",&m);while(m--)scanf("%d",&x),dp[n][x]?puts("YES"):puts("NO");}return 0;}


0 0