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;
    }
  • 相关阅读:
    PHP 获取当前url的函数及参数
    PHP 和 AJAX responseXML 实例
    PHP 和 AJAX 投票
    AJAX技术在PHP开发中的简单应用
    摄影教程
    结合 Ajax 进行 PHP 开发
    CSS 格式验证器
    swfobject.js,这个JS究竟有什么作用呢
    PHP中Date获取时间不正确怎么办
    用来给不愿意用iframe的同志的页面引用的解决办法
  • 原文地址:https://www.cnblogs.com/cmmdc/p/6941165.html
Copyright © 2011-2022 走看看