Lintcode 730 所有子集的和
已知:
给一整数 n, 我们需要求前n个自然数形成的集合的所有可能子集中所有元素的和。
示例:
给出 n = , 返回
可能的子集为 {{}, {}, {, }}.
子集的元素和为 + + + = 给出 n = , 返回
可能的子集为 {{}, {}, {}, {, }, {, }, {, }, {, , }}
子集的和为:
+ + + ( + ) + ( + ) + ( + ) + ( + + ) =
思路:
其实这更像是一个数学问题,而不是代码问题。以4为例子,取一个数,则取1的可能性为1种,取两个数字,则取1的可能性为3种,取三个数字,则取1的可能性为3种,
取四个数字,可能性为1种,则1总共计算了 +++ 共8次, 其他三个数字也是8次。
所以,结合上面两个示例,很容易可以推的:
当已知n的值时,我们会取里面的每个数字2^(n-)次
上述分析来源:http://blog.csdn.net/mio_bass/article/details/78797298
根据上述分析,求解的公式就是
公式解析:因为最后把所有子集的所有项累加的表达式里面,1~n的每一个数都有机会出现2^(n-1)次,所以求和表达式就变为:
最终变为上面第一个公式。
利用第一个公式求解就非常方便了。
补充:
对于“会取里面的每个数字2^(n-1)次”的另一种解析可以如下进行:
集合里面有1~n共n个元素。构造子集的时候,对每个元素而言都有取或不取两种选择,所以子集数目共有2^(n-1)个。
讨论这些子集:原集合的元素ai只有选和不选两种情况,故所有子集分两类:包含ai的子集和不包含ai的子集。每一类的子集个数都是2^(n-1)个。
所以最后面计算累加和的时候需要累加ai的次数是2^(n-1)次,也就是元素ai对累加和的贡献是ai*2^(n-1)。
每一个元素出现的次数都是2^(n-1)次,所以上述第二个公式即可推出来。
代码比较简单就不写了。
其他参考:
http://blog.csdn.net/zhaohengchuan/article/details/78716365
http://blog.csdn.net/u010005161/article/details/52175525
Lintcode 730 所有子集的和的更多相关文章
- lintcode 中等题:subsets II 带重复元素的子集
题目 带重复元素的子集 给定一个可能具有重复数字的列表,返回其所有可能的子集 样例 如果 S = [1,2,2],一个可能的答案为: [ [2], [1], [1,2,2], [2,2], [1,2] ...
- lintcode 中等题:subSets 子集
题目 子集 给定一个含不同整数的集合,返回其所有的子集 样例 如果 S = [1,2,3],有如下的解: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], ...
- (lintcode全部题目解答之)九章算法之算法班题目全解(附容易犯的错误)
--------------------------------------------------------------- 本文使用方法:所有题目,只需要把标题输入lintcode就能找到.主要是 ...
- [LintCode]——目录
Yet Another Source Code for LintCode Current Status : 232AC / 289ALL in Language C++, Up to date (20 ...
- 成吨提高开发效率:Intellij Shortcuts精简子集与思维模式
在线精简cheatsheet备查表:intellij.linesh.twGithub项目:intellij-mac-frequent-keymap Intellij的快捷键多而繁杂,从官方推荐的key ...
- [LeetCode] Subsets II 子集合之二
Given a collection of integers that might contain duplicates, S, return all possible subsets. Note: ...
- Lintcode 85. 在二叉查找树中插入节点
-------------------------------------------- AC代码: /** * Definition of TreeNode: * public class Tree ...
- Lintcode 166. 主元素
----------------------------------- Moore's voting algorithm算法:从一个集合中找出出现次数半数以上的元素,每次从集合中去掉一对不同的数,当剩 ...
- Lintcode 166. 链表倒数第n个节点
----------------------------------- 最开始的想法是先计算出链表的长度length,然后再从头走 length-n 步即是需要的位置了. AC代码: /** * De ...
随机推荐
- select 禁止 选择
禁止select控件選擇 大家知道, 對於HTML控件select, 是沒有readOnly屬性的,所以設置它並不起作用,如: <select id="select1" re ...
- bootstrap之排版样式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [ZJOI2006]书架
链接:https://www.luogu.org/problemnew/show/P2596 题解: 写了两天的平衡树终于大概弄好了所有模板(模板不熟写错debug真是要死) 对于放在头尾,只需要删除 ...
- springmvc传参问题
@RequestMapping(value = "/addHit", method = { RequestMethod.POST, RequestMethod.GET }) pub ...
- Mybatis Generator xml格式配置
Mybatis Generator可以使用Maven方式和Java方法,使用Maven这里是配置文件: <?xml version="1.0" encoding=" ...
- 【Java】同步阻塞式(BIO)TCP通信
TCP BIO 背景 网络编程的基本模型是Clien/Server模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的地址发起连接 ...
- win10 大文件 安卓android studio修改 汉化
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha ========== win10 大文件 gradle-3.3-all 这个里面有 大量 ...
- 牛客提高集训营6 C 树(树链剖分)
题目链接 为了纪(zhuang)念(bi)写完这个树剖单独写一篇.感觉还好,也就6k嘛. 完整比赛题解:https://www.cnblogs.com/SovietPower/p/9826829.ht ...
- hihocoder 1496 寻找最大值(高维前缀最大次大值)
[题目链接] https://hihocoder.com/problemset/problem/1496 [题目大意] 给定N个数A1, A2, A3, ... AN, 从中找到两个数Ai和Aj(i≠ ...
- [CF1030E]Vasya and Good Sequences
[CF1030E]Vasya and Good Sequences 题目大意: 给定一个长度为\(n(n\le3\times10^5)\)的数列\(a_i(1\le a_i\le10^{18})\). ...