P2415 集合求和
✅ 核心数学结论(组合数学)
对于一个包含 n
个元素的集合:
每个元素
a[i]
出现在多少个子集中?答:2^(n-1) 个子集!
**原因:**固定一个元素,其它
n-1
个元素可以随意选或不选(2^(n-1) 种方式),所以该元素出现在 2^(n-1) 个子集。
✅ 所以,所有子集元素之和就是:
总和=(a[0]+a[1]+⋯+a[n−1])×2n−1\text{总和} = (a[0] + a[1] + \cdots + a[n-1]) \times 2^{n-1}总和=(a[0]+a[1]+⋯+a[n−1])×2n−1
也就是:集合中所有元素之和 × 2^(n-1)
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 60;
#define ll long long
vector<ll> a;
int main()
{ll x,res=0;while(cin>>x) {a.push_back(x);res+=x;}ll n=a.size();res*=pow(2,n-1);cout<<res;return 0;
}