zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    JDBC 复习4 批量执行SQL
    JDBC 复习3 存取Oracle大数据 clob blob
    Oracle复习
    Linux命令(1)grep
    JDBC 复习2 存取mysql 大数据
    JDBC 复习1 DBUtil
    php 环境搭建问题
    Windows 批处理 bat 开启 WiFi 菜单选项 设置ID PWD
    Bat 批处理启动和停止Oracle 服务
    docker 学习1 WSL docker ,Windows docker
  • 原文地址:https://www.cnblogs.com/lovewhy/p/7787750.html
Copyright © 2011-2022 走看看