1 条题解

  • 0
    @ 2025-8-24 21:37:27

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar feecle6418
    **

    搬运于2025-08-24 21:37:27,当前版本为作者最后更新于2017-08-12 15:01:16,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    我把这题的公式推导过程详细的说一下。

    先选出指定的一个元素,加入子集;

    首先,当子集里只有一个元素时,在其他剩余的元素中不能选出任何元素加入到子集中,所以对于每个元素来说,均有 Cn10C_{n-1}^0 次被选中。

    当子集里有 2 个元素时,在其他剩余的元素中选出 1 个元素加入到子集中,所以对于每个元素来说,均有 Cn11C_{n-1}^1 次被选中。

    当子集里有 3 个元素时,在其他剩余的元素中选出 2 个元素加入到子集中,所以对于每个元素来说,均有 Cn12C_{n-1}^2 次被选中。

    当子集里有 i (in)i\ (i\leq n) 个元素时,在其他剩余的元素中选出 i1i-1 个元素加入到子集中,所以对于每个元素来说,均有 Cn1i1C_{n-1}^{i-1} 次被选中。

    所以共有 i=1nCn1i1\sum_{i=1}^{n} {C_{n-1}^{i-1}} 次被选中,即 2n12^{n-1} 次被选中。

    也可以这样考虑:如果要选中 xx,剩下的元素都可选可不选,所以总共有 2n12^{n-1} 种方法。

    代码:

    #include<iostream>
    #include<cmath>
    using namespace std;
    int a[31],i=0,j;
    long long s=0;
    int main(){
        //cout<<s;
        while(cin>>a[i++]);//合写cin>>a[i];i++;
        for(j=0;j<i;j++){
            s+=a[j];
        }
        s*=pow(2,i-2);//注意,i-2!
        cout<<s;
        return 0;
    }
    
    • 1

    信息

    ID
    1436
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者