• P2415 集合求和


    因为快要NOIP了,今天是11.5,还有五天。。。在qbxt的时候暴力老是拿不到分,所以就专门来练习搜索,从入门难度开始做,这是第二道标签是搜索但其实是数学的题,一共做了两道题,全是假搜索,搜索复杂度2^n,而且不能加剪枝。

    谁都能看懂的60分dfs(一共就五个点):

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 using namespace std;
     5 
     6 int cnt,num[50];
     7 long long ans;
     8 
     9 void dfs(int now,long long sum)
    10 {
    11     if(now>cnt-1)
    12     {
    13         ans+=sum;
    14         return;
    15     }
    16     dfs(now+1,sum);
    17     dfs(now+1,sum+num[now]);
    18 }
    19 
    20 int main()
    21 {
    22     while(cin>>num[++cnt]);
    23     dfs(1,0);
    24     printf("%lld",ans);
    25     return 0;
    26 }
    View Code

    正解:

     1 /*
     2     一个集合一共有2^n个子集,其中每个子集中,元素a可以选,也可以不选。
     3     所以被选与不选各占二分之一,被选的次数为(1/2)*(2^n)=(2^n)/2=2^(n-1)
     4     所以把所有元素的和加起来,然后乘以他们出现的次数 -> sum * 2^(n-1)
     5 */  
     6 
     7 #include<cstdio>
     8 #include<cstring>
     9 #include<algorithm>
    10 
    11 long long ans;
    12 
    13 int main()
    14 {
    15     int a,cnt=0;
    16     while(~scanf("%d",&a)) ans+=a,++cnt;
    17     long long sum=1;
    18     sum<<=(cnt-1);
    19     printf("%lld",ans*sum);
    20     return 0;
    21 }
    View Code
  • 相关阅读:
    如何拍摄高质量数码照片
    背单词的捷径
    深职院校园的凤凰花
    MD5加密
    如何去遍历对象中的所有的属性值
    写给Vera
    トレーニングと自然(練習文)
    071203plan
    生日快乐!!!
    20071127不知阴晴
  • 原文地址:https://www.cnblogs.com/lovewhy/p/7787750.html
Copyright © 2020-2023  润新知