• 1873: This offer(zzuli)


    题目描述

    话说WX入职已经有一个多月了,公司boss突然扔给他了一个问题,如果解决不了的话就会被开除掉 - -#,情急之下他只能来请教你了,boss给了他N个不大于100的数,现在wx需要将这N个数通过在两两间添上‘+’或‘-’,最后合成为一个数,注意数字的顺序不能被改变,不同的方式会得到不同的结果,boss想要知道最后一共能得到多少种不同的结果

    输入

    输入案例有多组,每组数据占两行,第一行输入一个整数,即N1<=n<=20),第二行输入N个数Ai0<= Ai <= 100

    输出

    对于每组数据,输出最终能得到的结果数

    样例输入

    3
    1 2 4
    4
    1 2 2 3

    样例输出

    4
    6
     1 #include<iostream>
     2 #include<algorithm>
     3 #include<numeric>
     4 #include<cstring>
     5 using namespace std;
     6 int n, k, a[1000], b[5000];
     7 void dfs(int i, int Sum)
     8 {
     9     if (i == n)
    10     {
    11         b[Sum] = 1; return;
    12     }
    13         dfs(i + 1, Sum + a[i]);
    14         dfs(i + 1, Sum - a[i]);
    15 }
    16 int main()
    17 {
    18     while (~scanf("%d",&n))
    19     {
    20         k = 0;
    21         for (int i = 0; i < n; i++)
    22             cin >> a[i];
    23         memset(b,0,sizeof(b));
    24         dfs(1,2000+ a[0]);
    25         int ans = 0;
    26         for (int i = 0; i < 5000; i++)
    27             if (b[i]) ans++;
    28         printf("%d
    ", ans);
    29     }
    30     return 0;
    31 }

    //在处理得到的每一个sum时,记录了每一个结果,总是时间超限,哎,心痛。好不容易知道了怎么弄,,,最终还是白了

  • 相关阅读:
    linux Segmentation faults 段错误详解
    linux cut
    linux sed
    linux tr
    linux ar
    objdump--反汇编查看
    linux中dd命令
    readelf
    登录后,前端做了哪些工作,如何得知已登录?
    正向代理和反向代理?
  • 原文地址:https://www.cnblogs.com/kangdong/p/8868137.html
Copyright © 2020-2023  润新知