The Balance HDU - 1709 母函数(板子变化)
阅读原文时间:2023年07月09日阅读:2

题意:

现在你被要求用天平和一些砝码来量一剂药。当然,这并不总是可以做到的。所以你应该找出那些不能从范围[1,S]中测量出来的品质。S是所有重量的总质量。

输入一个n,后面有n个数,表示这n个物品的质量

题解:

注意这个题的题干,这个天平只要能制造出来那个质量差,然后这个质量差就不会输出(看懂第二个样例就行)

这道题是母函数的变化版,没学过母函数的可以看一下:母函数 <普通母函数(HDU - 1028 ) && 指数型母函数(hdu1521)>

代码:

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 using namespace std;
9 typedef long long ll;
10 const int maxn=105;
11 int c1[maxn*maxn],c2[maxn*maxn],v[maxn];
12 int main()
13 {
14 int n;
15 queuer;
16 while(~scanf("%d",&n))
17 {
18 int sum=0;
19 memset(c1,0,sizeof(c1));
20 memset(c2,0,sizeof(c2));
21 for(int i=1;i<=n;++i) 22 { 23 scanf("%d",&v[i]); 24 sum+=v[i]; 25 } 26 c1[0]=1; 27 for(int i=1;i<=n;++i) 28 { 29 for(int j=0;j<=sum;++j) 30 { 31 for(int k=0;k+j<=sum && k<=v[i];k+=v[i]) 32 { 33 if(j>k) c2[j-k]+=c1[j];
34 else c2[k-j]+=c1[j];
35 c2[k+j]+=c1[j];
36 }
37 }
38 for(int j=0;j<=sum;++j)
39 c1[j]=c2[j];//,c2[j]=0;
40 }
41 for(int i=1;i<=sum;++i)
42 {
43 if(!c1[i])
44 r.push(i);
45 }
46 printf("%d\n",r.size());
47 int flag=0;
48 while(!r.empty())
49 {
50 if(!flag)
51 printf("%d",r.front()),flag=1;
52 else printf(" %d",r.front());
53 r.pop();
54 }
55 if(flag)
56 printf("\n");
57 }
58 return 0;
59 }

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器