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).

  • 相关阅读:
    [ python ] 线程的操作
    [ python ] 进程的操作
    RabbitMQ 集群
    RabbitMQ 实践及使用
    RabbitMQ 基础知识
    [ python ] FTP作业进阶
    [ python ] 项目一:FTP程序
    [ python ] 网络编程(2)
    [ python ] 网络编程(1)
    Linux 日志系统及分析
  • 原文地址:https://www.cnblogs.com/ke-xin/p/13573382.html
Copyright © 2011-2022 走看看