zoukankan      html  css  js  c++  java
  • 集合的所有子集的值的和

    集合的所有子集的值的和

    【问题】:

    ​ 给一个集合,包含n个数。

    ​ 规定集合的值为集合中所有元素的和。

    ​ 求,该集合的所有子集的值的和。

    【数据】:

    ​ [1, 2]

    ​ 子集是:[空集], [1], [2], [1, 2]

    ​ 答案是: 1 + 2 + (1 + 2) = 6;

    【分析】:

    ​ 这一题不能正向思考,去枚举所有的子集然后计算和。

    ​ 因为子集的数量是2^n, 所以效率极低。

    ​ 数学的方法就是来计算贡献。

    ​ 我们计算每个元素在结果中贡献了多少,在本题中就是在多少个子集合中出现了就加多少次。

    ​ 每个元素会在多少子集合中出现?

    ​ 我们来考虑去掉这个元素以后,原集合有多少个子集合, 在这些所有的子集合中都加上这个元素就是这个元素出现的次数了。

    ​ 有n-1个元素的集合共有2^(n-1)个子集, 所以每个元素都出现了2^(n-1)次。

    ​ 所以就是(ans = a[0]*(2^(n-1)) + .....+ a[n]*(2^(n-1)))

    ​ 也就是 ans = sum*2^(n-1).

  • 相关阅读:
    超级楼梯
    超级楼梯
    母牛的故事
    母牛的故事
    蟠桃记
    蟠桃记
    Children’s Queue
    Children’s Queue
    http://202.194.116.8/webapps/portal/frameset.jsp?tab_id=_2_1&url=%2fwebapps%2fblackboard%2fexecute%2
    Matlab位运算笔记
  • 原文地址:https://www.cnblogs.com/ke-xin/p/13573382.html
Copyright © 2011-2022 走看看