hduoj1709!【母函数】

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:06   1198   0
/*The Balance
Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5541    Accepted Submission(s): 2243


Problem Description
Now you are asked to measure a dose of medicine with a balance and a number of weights. Certainly it is not always achievable. So you should find
 out the qualities which cannot be measured from the range [1,S]. S is the total quality of all the weights.

Input
The input consists of multiple test cases, and each case begins with a single positive integer N (1<=N<=100) on a line by itself indicating the number
 of weights you have. Followed by N integers Ai (1<=i<=N), indicating the quality of each weight where 1<=Ai<=100.

Output
For each input set, you should first print a line specifying the number of qualities which cannot be measured. Then print another line which consists 
all the irrealizable qualities if the number is not zero.

 
Sample Input
3
1 2 4
3
9 2 1
 
Sample Output
0
2
4 5
 
Source
HDU 2007-Spring Programming Contest 
*/
#include<stdio.h>
#include<string.h>
int main()
{
 int a[110], b[11000], i, j, k, n, sum, c[11000], lc;
 while(scanf("%d", &n) != EOF)
 {
  sum = 0;
  memset(b, 0 , sizeof(b));
  for(i = 0; i < n; i++)
  {
   scanf("%d", &a[i]);
   sum += a[i];
  }
  b[0] = 1;//初始化
  b[a[0]] = 1;//初始化
  for(i = 2; i <= n; i++)
  {
   memset(c, 0, sizeof(c));
   for(j = 0; j <= sum; j++)
   for(k = 0; k + j <= sum && k <= a[i-1]; k += a[i-1])//每个重量的砝码只有一个
   {
    if( k > j) c[k-j] += b[j];//双向称砝码
    else   c[j-k] += b[j];
    c[j+k] += b[j];
   }
   for(k  =0; k <= sum ; k++)
   b[k] = c[k];
  }
  int num = 0;
  for(i = 0;i <= sum; i++)
  if( !b[i])
  num++;
  printf("%d\n", num);
  if(num == 0)
  continue;
  else
  {
   j = 0;
   for(i = 0; i <= sum; i++)
   if(!b[i])
   {
    j++;
    if(j != num)
    printf("%d ", i);
    else
    printf("%d\n", i);
   }
  }
 }
 return 0;
}


题意:给你n个砝码,用天秤秤出所能得到的各种质量,输出1到砝码总和之间所不能得到的数字。

注意:砝码可以左右分开放,得到不同的质量数。

这里用的依旧是母函数,难点在于怎么处理左右放砝码,左右放砝码就好比是减法得出一个新的数字。
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP