zoukankan      html  css  js  c++  java
  • HDOJ 1709 The Balance(母函数)

    The Balance

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 4497    Accepted Submission(s): 1808


    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
     
    Recommend
    lcy
     
     1 //对每个砝码可以不用,也可以放到左边或右边。。。。。
     2 
     3 #include <iostream>
     4 #include <cstdio>
     5 #include <cstring>
     6 
     7 using namespace std;
     8 
     9 int n,m;
    10 int a[111];
    11 int c1[22222],c2[22222];
    12 const int cc=10001;
    13 
    14 int main()
    15 {
    16 while(scanf("%d",&n)!=EOF)
    17 {
    18     int m=0;
    19     for(int i=1;i<=n;i++)
    20     {
    21         scanf("%d",&a[i]);
    22         m+=a[i];
    23     }
    24 
    25     memset(c1,0,sizeof(c1));
    26     memset(c2,0,sizeof(c2));
    27 
    28     for(int i=-a[1];i<=a[1];i+=a[1])
    29     {
    30         c1[i+cc]=1;
    31     }
    32 
    33     for(int i=2;i<=n;i++)
    34     {
    35         for(int j=-m;j<=m;j++)
    36         {
    37             for(int k=-a[i];k+j<=m&&k<=a[i];k+=a[i])
    38             {
    39                 c2[k+j+cc]+=c1[j+cc];
    40             }
    41         }
    42         for(int j=-m;j<=m;j++)
    43         {
    44             c1[j+cc]=c2[j+cc];
    45             c2[j+cc]=0;
    46         }
    47     }
    48 
    49     int aas[10000]={0};
    50     int ans=0;
    51     for(int i=0;i<=m;i++)
    52     {
    53         if(c1[i+cc]||c1[-i+cc]) ;
    54         else
    55         {
    56             aas[ans]=i;
    57             ans++;
    58         }
    59     }
    60 
    61     printf("%d
    ",ans);
    62     for(int i=0;i<ans;i++)
    63     {
    64         if(i==0)
    65             printf("%d",aas[i]);
    66         else
    67             printf(" %d",aas[i]);
    68     }
    69     if(ans)
    70     putchar(10);
    71 
    72 }
    73 
    74     return 0;
    75 }
  • 相关阅读:
    发现不错的cache系统Cache Manager Documentation
    List.Sort用法
    Database Initialization Strategies in Code-First:
    git rebase
    osharpV3数据库初始化
    IdentityDbContext
    AspNetUsers
    VS2015 推荐插件
    ELMAH日志组件数据库脚本
    C#如何把List of Object转换成List of T具体类型
  • 原文地址:https://www.cnblogs.com/CKboss/p/3165229.html
Copyright © 2011-2022 走看看