题目描述
给定一个集合 s s(集合元素数量 \le 30≤30),求出此集合所有子集元素之和。
输入格式
集合中的元素(元素 \le 1000≤1000)
输出格式
s s 所有子集元素之和。
输入输出样例
输入 #1
2 3
输出 #1
10
说明/提示
【样例解释】
子集为:∅,{2},{3},{2,3},和为 2 + 3 + 2 + 3 = 102+3+2+3=10。
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int inf=0x3f3f3f3f;
int main(){
ll s=0;
int cnt=0,n;
while(cin>>n){
s+=n;
cnt++;
}
printf("%lld",s<<(cnt-1));
return 0;
}
借鉴大佬思路:
思考:关于此种选择性求和,可以应用到排列组合计算,会更加明了。另外用sum<<(i-1)位运算会更加快捷。