zoukankan      html  css  js  c++  java
  • 2017年上海金马五校程序设计竞赛:Problem C : Count the Number (模拟)

    Description

    Given n numbers, your task is to insert '+' or '-' in front of each number to construct expressions. Note that the position of numbers can be also changed.

    You can calculate a result for each expression. Please count the number of distinct results and output it.

    Input

    There are several cases.

    For each test case, the first line contains an integer n (1 ≤ n ≤ 20), and the second line contains n integers a1,a2, ... ,an(-1,000,000,000 ≤ ai ≤ 1,000,000,000).

    Output

    For each test case, output one line with the number of distinct results.

    Sample Input

    2
    1 2
    3
    1 3 5
    

    Sample Output

    4
    8
    

    分析:

    题意:给出一个数n,n的规模不超过20(问题规模比较小),接下来一行给出N个数字,然后我们可以在任何一个数字前面放置+或-号。然后计算出一个值。

    问由这组数经过不同的加减组合能得到多少种不同的答案。

    由于问题的规模比较小,直接暴力就可以过,深搜到最后一个数后,肯它得出的答案有没有出现过(用一个map容器来保存)。

    代码:

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<map>
    using namespace std;
    
    long long a[25];
    map<long long,int>m;
    long long ans;
    int n;
    void dfs(int sum,int i)
    {
        if(i == n+1)
        {
           if(m[sum]==0) ///没有出现过
           {
               m[sum] = 1;
               ans++;
           }
           return;
        }
        dfs(sum+a[i],i+1);
        dfs(sum-a[i],i+1);
    }
    int main()
    {
        while(~scanf("%d",&n))
        {
            for(int i = 1; i <= n; i++)
                scanf("%d",&a[i]);
            m.clear();
            ans = 0;
            dfs(0,0);
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    nth-child与nth-of-type
    改变事件绑定的this的问题
    瀑布流的一些CSS实现方式
    事件捕获与冒泡的再探
    为学
    ECharts导出word 图表模糊失真
    垂直对齐:vertical-align:super属性
    Vuex- Action的 { commit } {commit}是什么写法
    修改对象中的属性名
    echarts 角度渐变环形图心得
  • 原文地址:https://www.cnblogs.com/cmmdc/p/6941165.html
Copyright © 2011-2022 走看看