集合的所有子集的值的和

集合的所有子集的值的和

【问题】:

​ 给一个集合,包含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).

posted @ 2020-08-27 19:33  ke_xin  阅读(616)  评论(0编辑  收藏  举报