题目
小明捡到了一架没有游标的天平和N个标有重量的砝码,于是他想知道他能够称出多少种不同的重量(假设只能将砝码放在一侧)。
输入格式
输入的第一行包含一个正整数N,表示有N个砝码。接下来一行有N个正整数,表示N个砝码的重量。
输出格式
输出一行,包含一个整数,表示能够称出多少种不同的重量。
样例输入
3
1 2 3
样例输出
6
数据规模和约定
N<16,砝码重量<=1000。
思路
这是一个回溯法求子集和的问题。如图,以砝码重量为[1,2,3]为例。构造一棵子集树并在结点求和。
代码
#include <iostream>
#include <numeric> //数组求和accumulate()函数的头文件
#include <vector>
#include <set> //利用set去重
using namespace std