#6677. 最少选几个数

最少选几个数

题面:最少选几个数

时间限制: 1 秒 内存限制: 256 MB

给定 n 个正整数 a1, a2, ..., an,以及一个目标值 T

你可以从这 n 个数中选择若干个数,也可以一个都不选。

请你求出:如果要使被选中的所有数之和恰好等于 T,最少需要选择多少个数。

如果不存在这样的选择方案,请输出 No solution

输入格式

第一行包含两个整数 n, T

第二行包含 n 个正整数 a1, a2, ..., an

输出格式

如果存在合法方案,输出一个整数,表示最少需要选择的数字个数。

如果不存在合法方案,输出:

No solution

数据范围

1 <= n <= 20
0 <= T <= 10^9
1 <= ai <= 10^9

样例

输入

4 5
1 2 3 4

输出

2

说明

可以选择 14,它们的和为 5,共选择了 2 个数。

也可以选择 23,同样可以得到 5

不存在只选择 1 个数就能得到 5 的方案,因此答案为 2

测试点说明表

测试点编号 n ≤ T ≤ 特殊性质 设计目的
1 1 0 目标为 0 覆盖空集方案,答案为 0
2 5 单个数恰好等于目标 覆盖最小非空可行情况
3 4 样例数据 对应原程序固定数据,答案为 2
4 3 1 目标小于所有元素 覆盖无解输出
5 10 一个数可直接达到目标 检查是否能找到最少选数 1
6 4 7 多个二元组合可行 覆盖普通最优方案
7 6 15 所有元素相同 检查重复元素下的最少个数
8 10 7 全部为 1 覆盖必须选择多个数的情况
9 31 元素为 2 的幂 覆盖唯一组合结构
10 20 100 极限 n,递增序列 覆盖较大搜索空间和最优性剪枝