此题坑点:

  • 结果必须要用long long存,int存不下

  • 如果想要像cout<<sum*pow(2,num-1)这样在输出时计算会错:
    long long在计算过程被隐式转换成了double,需要用强制类型转换转换回long long输出。

  • 集合论和排列组合公式初中还没学


题目描述

给定一个集合s(集合元素数量<=30),求出此集合所有子集元素之和。

分析

我们来看一个例子: \{1,2,3\}{1,2,3}

可以得到,它的所有非空子集为 \{1,2,3\}{1,2,3} \{1,2\}{1,2}\{2,3\}{2,3} \{1,3\}{1,3} \{1\}{1} \{2\}{2} \{3\}{3}

现在来分析每一个元素在每一个子集中出现的个数:

11出现了44次,22出现了44次,33出现了44次

我们猜测:对于一个有限集合AA,它的每一个元素在AA的所有子集中出现的个数是{2^{\operatorname{card}(A)-1}}2card(A)−1

证明:(集合论纯自学,可能格式有误, 请别在意QAQ)

设B\subseteq AB⊆A, 记n=\operatorname{card}(A)n=card(A), ss为AA中所有元素之和

当\operatorname{card}(B)=1card(B)=1时,显然,每个元素在BB中出现11次;

当\operatorname{card}(B)=2card(B)=2时,保证一个元素必选,在剩余的n-1n−1个元素中选择11个元素,共C^1_{n-1}=n-1Cn−11​=n−1种情况,故每个元素在BB中出现C^1_{n-1}=n-1Cn−11​=n−1次;

当\operatorname{card}(B)=3card(B)=3时,保证一个元素必选,在剩余的n-1n−1个元素中选择22个元素,共C^2_{n-1}=\frac{(n-1)!}{2(n-1-2)!}=\frac{(n-1)(n-2)}{2}Cn−12​=2(n−1−2)!(n−1)!​=2(n−1)(n−2)​种情况,故每个元素在BB中出现共C^2_{n-1}=\frac{(n-1)(n-2)}{2}Cn−12​=2(n−1)(n−2)​次;

当\operatorname{card}(B)=kcard(B)=k时,保证一个元素必选,在剩余的n-1n−1个元素中选择k-1k−1个元素,共C^{k-1}_{n-1}Cn−1k−1​种情况,故每个元素在BB中出现共C^{k-1}_{n-1}Cn−1k−1​次;

那么,每个元素在AA的每一个子集中出现的个数为: \sum\limits_{i=1}^{n}C^{i-1}_{n-1}=2^{n-1}i=1∑n​Cn−1i−1​=2n−1 ①

AA的所有子集元素之和为s\times2^{n-1}s×2n−1

故代码如下:

#include<bits/stdc++.h>
using namespace std;
int main(){
long long tmp,num=,sum=;
while(cin>>tmp){
sum+=tmp;
num++;
}//读入集合元素个数num和元素和sum
cout<<(long long)(sum*pow(,num-));
//必须显式地转换为long long输出
}

①: 不懂为什么\sum\limits_{i=1}^{n}C^{i-1}_{n-1}=2^{n-1}i=1∑n​Cn−1i−1​=2n−1的可以看一下数学归纳法证明:

将用到的性质公式:

  • C^m_n=C^{m-1}_{n-1}+C^{m}_{n-1}Cnm​=Cn−1m−1​+Cn−1m​
  • C^n_n=C^0_n=1Cnn​=Cn0​=1

\sum\limits_{i=0}^{n}C^{i}_{n}=2^{n}i=0∑n​Cni​=2n

证明:

1)当n=1n=1时:

\sum\limits_{i=0}^{n}C^{i}_{n}=C^0_1+C^1_1=2=2^1i=0∑n​Cni​=C10​+C11​=2=21

等式成立。

2)假设当n=k(k\in N_+)n=k(k∈N+​)时\sum\limits_{i=0}^{n}C^{i}_{n}=2^{n}i=0∑n​Cni​=2n 成立, 即\sum\limits_{i=0}^{k}C^{i}_{k}=2^{k}i=0∑k​Cki​=2k

那么当n=k+1n=k+1时:

\text{\ \ \ \ }     \sum\limits_{i=0}^{k+1}C^{i}_{k+1}i=0∑k+1​Ck+1i​

=C^{0}_{k+1}+C^{1}_{k+1}+C^{2}_{k+1}+...+C^{k}_{k+1}+C^{k+1}_{k+1}=Ck+10​+Ck+11​+Ck+12​+...+Ck+1k​+Ck+1k+1​

=C^{0}_{k+1}+(C^{0}_{k}+C^{1}_{k})+(C^{1}_{k}+C^{2}_{k})+...+(C^{k-1}_{k}+C^{k}_{k})+C^{k+1}_{k+1}=Ck+10​+(Ck0​+Ck1​)+(Ck1​+Ck2​)+...+(Ckk−1​+Ckk​)+Ck+1k+1​

=C^{0}_{k}+(C^{0}_{k}+C^{1}_{k})+(C^{1}_{k}+C^{2}_{k})+...+(C^{k-1}_{k}+C^{k}_{k})+C^{k}_{k}=Ck0​+(Ck0​+Ck1​)+(Ck1​+Ck2​)+...+(Ckk−1​+Ckk​)+Ckk​

=2(C^0_k+C^1_k+C^2_k+...+C^k_k)=2(Ck0​+Ck1​+Ck2​+...+Ckk​)

=2\sum\limits_{i=0}^{k}C^{i}_{k}=2i=0∑k​Cki​

=2\times2^k=2×2k

=2^{k+1}=2k+1

此时等式依然成立。假设成立。

故\sum\limits_{i=0}^{n}C^{i}_{n}=2^{n}i=0∑n​Cni​=2n

由此可以得到,\sum\limits_{i=1}^{n}C^{i-1}_{n-1}=2^{n-1}i=1∑n​Cn−1i−1​=2n−1

P2415 集合求和(一道洛谷好题鸭)(虽然可以水过,但有必研究DP)的更多相关文章

  1. P2415 集合求和

    P2415 集合求和显然,一共有2^n个子集,对于其中的一个确定的元素,它不在的集合有2^(n-1),相当于有n-1元素,那么它存在的集合有,2^n-2^(n-1)==2^(n-1),那么集合的和为s ...

  2. 整除分块学习笔记+[CQOI2007]余数求和(洛谷P2261,BZOJ1257)

    上模板题例题: [CQOI2007]余数求和 洛谷 BZOJ 题目大意:求 $\sum^n_{i=1}k\ mod\ i$ 的值. 等等……这题就学了三天C++的都会吧? $1\leq n,k\leq ...

  3. 洛谷 P7718 -「EZEC-10」Equalization(差分转化+状压 dp)

    洛谷题面传送门 一道挺有意思的题,现场切掉还是挺有成就感的. 首先看到区间操作我们可以想到差分转换,将区间操作转化为差分序列上的一个或两个单点操作,具体来说我们设 \(b_i=a_{i+1}-a_i\ ...

  4. Bzoj4753/洛谷P4432 [JSOI2016]最佳团体(0/1分数规划+树形DP)

    题面 Bzoj 洛谷 题解 这种求比值最大就是\(0/1\)分数规划的一般模型. 这里用二分法来求解最大比值,接着考虑如何\(check\),这里很明显可以想到用树形背包\(check\),但是时间复 ...

  5. 洛谷 P3287 - [SCOI2014]方伯伯的玉米田(BIT 优化 DP)

    洛谷题面传送门 怎么题解区全是 2log 的做法/jk,这里提供一种 1log 并且代码更短(bushi)的做法. 首先考虑对于一个序列 \(a\) 怎样计算将其变成单调不降的最小代价.对于这类涉及区 ...

  6. 【题解】洛谷P1373 小a和uim之大逃离(坐标DP)

    次元传送门:洛谷P1373 思路 设f[i][j][t][1/0]表示走到(i,j)时 小a减去uim的差值为t 当前是小a取(0) uim取(1) 那么转移就很明显了 f[i][j][t][]=(f ...

  7. 洛谷 P4125 [WC2012]记忆中的水杉树【扫描线+set+线段树】

    我没有找到能在bzojAC的代码--当然我也WA了--但是我在洛谷过了,那就假装过了吧 minmax线段树一开始写的只能用min更新min,max更新max,实际上是可以互相更新的-- 首先看第二问, ...

  8. 洛谷 P2415 集合求和【数学公式/模拟】

    给定一个集合s(集合元素数量<=30),求出此集合所有子集元素之和. 输入输出格式 输入格式: 集合中的元素(元素<=1000) 输出格式: 和 输入输出样例 输入样例#1: 2 3 输出 ...

  9. 洛谷P2415 集合求和

    题目描述 给定一个集合s(集合元素数量<=30),求出此集合所有子集元素之和. 输入输出格式 输入格式: 集合中的元素(元素<=1000) 输出格式: 和 输入输出样例 输入样例#1: 2 ...

随机推荐

  1. 学 Python (Learn Python The Hard Way)

    学 Python (Learn Python The Hard Way) Contents: 译者前言 前言:笨办法更简单 习题 0: 准备工作 习题 1: 第一个程序 习题 2: 注释和井号 习题 ...

  2. Net Framework,Net Core 和 Net Standard 区别

    前几天我在一个群里看到有关这方面的讨论,最后感觉讨论的不是很清晰,有幸的是我们的项目去年就开始迁移NetCore的调研了,我个人多多少少也是有过这方面的研究.下面我将说一下我自己对着三个的认识如果有不 ...

  3. 2019 年容器生态统计报告发布 | 云原生生态周报 Vol. 26

    作者 | 酒祝.天元.元毅.心水.衷源 业界要闻 1.2019 年容器生态统计报告发布  据报告显示,Kubernetes 占据 77% 的容器编排产品份额,Docker 占据 79% 的容器引擎产品 ...

  4. 【 格式化时间(SimpleDateFormat)用法】

    将特定字符串转换成Date格式 可以通过 new 一个 SimpleDateFormat 对象,通过对象调用parse方法实现 示例代码: String time = "2019-11-09 ...

  5. go中的数据结构切片-slice

    1.部分基本类型 go中的类型与c的相似,常用类型有一个特例:byte类型,即字节类型,长度为,默认值是0: bytes = []btye{'h', 'e', 'l', 'l', 'o'} 变量byt ...

  6. Box 黑科技 —— 支持手机端反编译 !Box 黑科技 —— 支持手机端反编译 !

    项目地址: Box 文末扫码获取最新安装包 . 前言 有将近一个月没有更新文章了,一方面在啃 AOSP ,消化起来确实比较慢.在阅读的过程中,有时候上来就会陷入源码细节,其实这是没有必要的.刚开始更多 ...

  7. Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)

    简介 经过一段时间的准备,完善的差不多了,继续分享有关Appium自动化测试框架综合实践.想必小伙伴们有点等不及了吧! driver配置封装 kyb_caps.yaml 配置表 参考代码 platfo ...

  8. 设计模式(Java语言)-单例模式

    单例模式,简而言之就是在整个应用程序里面有且仅有一个实例,在程序的任何时候,任何地方获取到的该对象都是同一个对象.单例模式解决了一个全局的类被频繁创建和销毁的,或者每次创建或销毁都需要消耗大量cpu资 ...

  9. Fuzzy模糊推导(Matlab实现)

    问题呈述 在模糊控制这门课程中,学到了与模糊数学及模糊推理相关的内容,但是并不太清楚我们在选择模糊规则时应该如何处理,是所有的规则都需要由人手工选择,还是仅需要选择其中的一部分就可以了.因此,在课程示 ...

  10. vue开发之跨域请求,请求头not allowed by Access-Control-Allow-Headers,后端cookie session值取不到(二)

    原因:你本地的请求ajax的get和post请求:如果你的请求头内放一些可用验证数据Token的时候就会存在跨域请求这是浏览器所不允许的问题: 方案一:后台的接口请求模式都写成jsonp请求,前端去调 ...