hdoj 1709 The Balance(母函数)

原创 2012年03月30日 02:48:49

【题目大意】:给出一些砝码,可以放在天秤的两边,问有[1,sum]中有哪些重量是不可称出来的


【解题思路】:母函数,这里比较特殊的一点是砝码可以放在天枰的左右两端,我们可以在c2[j+k]+=c1[j]后加多一句c2[abs(j-k)]+=c[j]...即可

                            假设原来的砝码都放在右端,则可以把新加的砝码放在左端,得到新重量。


【代码】:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
#include <string>
#include <cctype>
#include <map>
#include <iomanip>
                   
using namespace std;
                   
#define eps 1e-8
#define pi acos(-1.0)
#define inf 1<<30
#define linf 1LL<<60
#define pb push_back
#define lc(x) (x << 1)
#define rc(x) (x << 1 | 1)
#define lowbit(x) (x & (-x))
#define ll long long

int n;
int c1[10100],c2[10100];
int a[110];

int main() {
    while (~scanf("%d",&n)){
        int sum=0;
        for (int i=0; i<n; i++){
            scanf("%d",&a[i]);
            sum+=a[i];
        }
        memset(c1,0,sizeof(c1));
        memset(c2,0,sizeof(c2));
        for (int i=0; i<=a[0]; i+=a[0]) c1[i]=1;
        int now=a[0];
        for (int i=1; i<n; i++){
            for (int j=0; j<=now; j++){
                for (int k=0; k<=a[i]; k+=a[i]){
                    c2[j+k]+=c1[j];
                    c2[abs(j-k)]+=c1[j];
                }
            }
            now+=a[i];
            for (int j=0; j<=now; j++) c1[j]=c2[j],c2[j]=0;
        }
        int cnt=0;
        int tmp[10100];
        for (int i=1; i<=sum; i++){
            if (c1[i]==0){
                tmp[cnt]=i;
                cnt++;
            } 
        }
        cout << cnt << endl;
        for (int i=0; i<cnt-1; i++) cout << tmp[i] << " ";
        if (cnt!=0) cout << tmp[cnt-1] << endl;
    }
    return 0;
}


相关文章推荐

hdoj 1709 The Balance(母函数)

因为是天平,所以组合之间的差值也都是可以得到的,这差值也是新的组合数。 代码: #include #include #include using namespace std; const ...
  • CillyB
  • CillyB
  • 2016年10月27日 15:53
  • 164

HDoj-1709-The Balance-母函数

The Balance Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To...

HDU1709 The Balance 【母函数】

The Balance Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

HDU1709 The Balance,母函数套题

因为放在天平上,所以可以放左右两边。。。所以记得不仅可以加,还可以减。。。 /******************************************************...
  • neofung
  • neofung
  • 2012年07月04日 18:44
  • 1171

HDU 1709 The Balance(母函数)

题目:HDU-1085 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1085 题目: The Balance Time L...

hdu 1709 The Balance (母函数)

点击打开链接 /* 题目意思: 给你一个n,表示n个物品,下面有n个数,表示n个物品的重量,然后进行称量,每个物品只有一件,看不能称出的价值有几个,输出它,单独占一行, 当不为零时,输出所以不能...

Hdu 1709 The Balance 母函数

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1709 题目大意:

HDU 1709-The Balance(母函数的应用)

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1709 The Balance Time Limit: 1000/1000 MS (J...

HDU 1709 The Balance (母函数)

题意:给定一系列重量的砝码,然后问由这些砝码不能称出的重量有多少,并且打印这些重量,重量范围为1-s其中s为所有砝码的质量总和。 值得注意的是这个题目中的砝码可以在天平两遍都放。所以母函数完了,要记得...

hdu 1709 The Balance(母函数)

The Balance Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdoj 1709 The Balance(母函数)
举报原因:
原因补充:

(最多只允许输入30个字)