#6957. 货币总和(Money Sums)

货币总和(Money Sums)

货币总和(Money Sums)

**时间限制:**1.00 秒 **内存限制:**512 MB

题目描述

你有 (n) 枚硬币,每枚硬币都有一个面值。请找出使用这些硬币能够组成的所有不同金额。

每枚硬币最多使用一次。输出的金额不包括 (0)。

输入格式

第一行包含一个整数 (n),表示硬币的数量。

第二行包含 (n) 个整数 (x_1,x_2,\ldots,x_n),表示每枚硬币的面值。

输出格式

第一行输出一个整数 (k),表示可以组成的不同金额数量。

第二行按从小到大的顺序输出这 (k) 个金额。

数据范围

  • (1≤n≤100)(1 \le n \le 100)
  • (1≤xi≤1000)(1 \le x_i \le 1000)

样例输入

4
4 2 5 2

样例输出

9
2 4 5 6 7 8 9 11 13
测试点编号 层级 n 硬币总额 特殊性质 覆盖点与设计目的
1 弱数据 1 最小规模、最小正面值 检查单枚硬币及 DP 初始状态
2 4 20 所有面值均为 5 检查重复面值能否分别使用,以及不可达金额是否被排除
3 正常数据 15 重复面值与金额空档并存 检查非连续子集和、重复硬币及输出顺序
4 7 61 输入无序、组合较密集但不完全连续 检查一般混合组合及遗漏金额的识别
5 强数据 15 32767 面值为连续的 2 的幂 所有 1~32767 均可组成,检查较大 DP 区间、计数和长输出