P2415 集合求和(有公式且附记忆方法)

题目描述

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

输入格式 

集合中的元素(元素 ≤1000)

输出格式 

s 所有子集元素之和

此题有公式!!!

给定一个数字集合S = {a1,a2,a3,a4...,an},其所有子集元素之和为(a1+a2+...+an)*2^(n-1)

推导过程大家可以自行搜索,在此帮助大家解决如何记忆这个公式. 

由所有子集元素之和联想到先把所有最简单的子集相加即a1+a2+...+an---->想成集合S的各个小弟

*读作乘以,那么我们就谐音成诚意

2谐音成儿子

^(n-1)读作n-1次方,谐音成n-1访(次访----次方)

故事开始

各小弟(a1+a2+...+an)诚意(*)要做集合S的儿子(2),于是对S进行了n-1访.为啥不是n次拜访(^)呢?因为第n次的时候各小弟已经是S的儿子了,成为自家人就不用拜访啦!

#include
using namespace std;             //集合元素<=30,所以a数组整30个元素
int a[30],i=0,s=0,j;             //s存各元素之和  
long long sum=0;                 //sum是子集元素之和,因为数据大,开long long
int main(){
    while(cin>>a[i++]);          //向a数组输入数,i++的意思是先使用i再加一,结束时i为2
    for(j=0;j<=i-1;j++)          //下标0开始,所以是一直到i-1
	      s=s+a[j];              //求集合中各元素之和
    sum=s*pow(2,i-2);            //利用公式求,pow是c++内置函数,作用是一个数的多少次幂
    cout<

你可能感兴趣的:(#,洛谷题解,c++,算法,开发语言)