AT_arc017_3.[ARC017C] 無駄なものが嫌いな人
提高+/省选-
通过率:0%
AC君温馨提醒
该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
我讨厌无用的东西,所以只说我想说的,不说废话。
世上有一种叫做“背包问题”的东西,就是考虑如何把物品装进一个固定大小的背包,使得价值尽可能高,但我觉得考虑这些都是无用的。
即使价值再高,如果背包里出现了多余的空间,我也无法容忍。我讨厌无用的东西。
现在,这里有一个大小为 X 的背包和 N 个物品。
第 i 个物品的大小为 wi。至于物品的价值,考虑也没用,所以忽略不计。
有多少种方法可以装物品,使得背包里没有多余的空间呢?
也就是说,从 N 个物品中选出若干个,使得它们的大小之和恰好等于 X,有多少种选法?
我一开始想用手算这个问题,但发现这是一种无用的手段,所以决定拜托你来做。
请写一个没有无用计算时间的程序来解决这个问题,帮我节省无用的时间。
输入通过标准输入按以下格式给出。
N X
w1
w2
⋮
wN
- 第 1 行给出表示物品个数的整数 N (1≤N≤32) 和表示背包大小的整数 X (1≤X≤109),两者以半角空格分隔。
- 第 2 行到第 N 行,每行给出一个物品的大小。第 i 行为第 i 个物品的大小 wi (1≤wi≤5×107)。
请输出一个整数,表示从 N 个物品中选出若干个,使得它们的大小之和恰好等于 X 的选法数。
例如:
5 5
1
1
2
3
4
输出:
4
无多余空间的选法有以下 4 种:
- 选择物品 1、物品 2、物品 4:1+1+3=5
- 选择物品 1、物品 5:1+4=5
- 选择物品 2、物品 5:1+4=5
- 选择物品 3、物品 4:2+3=5
注意,物品 1 和物品 2 虽然重量相同,但视为不同的物品。
8 21
10
4
2
30
22
20
8
14
输出:
0
无论如何选择物品,都无法使大小之和恰好为 21。
20 100000000
35576749
38866484
6624951
39706038
11133516
25490903
14701702
17888322
14423251
32111678
24509097
43375049
35298298
21158709
30489274
37977301
19510726
28841291
10293962
12022699
输出:
45
16 8
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
输出:
12870
输入格式
第 1 行:两个整数 N 和 X,以空格分隔。
第 2 行到第 N+1 行:每行一个整数 wi,表示第 i 个物品的大小。
输出格式
输出一个整数,表示选出若干个物品,使得它们的大小之和恰好等于 X 的选法数。
说明/提示
- 物品的个数 N 不超过 32,可以考虑使用“折半枚举”或“meet-in-the-middle”算法。
- 物品的大小和背包容量都可能很大,不能用常规的动态规划。
- 物品可以不选,也可以全部选,选法数包括所有可能的子集。
- 物品即使大小相同,也视为不同的物品。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?