AT_arc017_3.[ARC017C] 無駄なものが嫌いな人

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

我讨厌无用的东西,所以只说我想说的,不说废话。
世上有一种叫做“背包问题”的东西,就是考虑如何把物品装进一个固定大小的背包,使得价值尽可能高,但我觉得考虑这些都是无用的。
即使价值再高,如果背包里出现了多余的空间,我也无法容忍。我讨厌无用的东西。
现在,这里有一个大小为 XX 的背包和 NN 个物品。
第 ii 个物品的大小为 wiw_i。至于物品的价值,考虑也没用,所以忽略不计。
有多少种方法可以装物品,使得背包里没有多余的空间呢?
也就是说,从 NN 个物品中选出若干个,使得它们的大小之和恰好等于 XX,有多少种选法?
我一开始想用手算这个问题,但发现这是一种无用的手段,所以决定拜托你来做。
请写一个没有无用计算时间的程序来解决这个问题,帮我节省无用的时间。

输入通过标准输入按以下格式给出。

NN XX
w1w_1
w2w_2
⋮\vdots
wNw_N

  • 第 1 行给出表示物品个数的整数 N (1≤N≤32)N\ (1\leq N\leq 32) 和表示背包大小的整数 X (1≤X≤109)X\ (1\leq X\leq 10^9),两者以半角空格分隔。
  • 第 2 行到第 NN 行,每行给出一个物品的大小。第 ii 行为第 ii 个物品的大小 wi (1≤wi≤5×107)w_i\ (1\leq w_i\leq 5\times 10^7)。

请输出一个整数,表示从 NN 个物品中选出若干个,使得它们的大小之和恰好等于 XX 的选法数。

例如:

5 5
1
1
2
3
4

输出:

4

无多余空间的选法有以下 44 种:

  • 选择物品 11、物品 22、物品 44:1+1+3=51+1+3=5
  • 选择物品 11、物品 55:1+4=51+4=5
  • 选择物品 22、物品 55:1+4=51+4=5
  • 选择物品 33、物品 44:2+3=52+3=5

注意,物品 11 和物品 22 虽然重量相同,但视为不同的物品。

8 21
10
4
2
30
22
20
8
14

输出:

0

无论如何选择物品,都无法使大小之和恰好为 2121。

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 行:两个整数 NN 和 XX,以空格分隔。
第 2 行到第 N+1N+1 行:每行一个整数 wiw_i,表示第 ii 个物品的大小。

输出格式

输出一个整数,表示选出若干个物品,使得它们的大小之和恰好等于 XX 的选法数。

说明/提示

  • 物品的个数 NN 不超过 3232,可以考虑使用“折半枚举”或“meet-in-the-middle”算法。
  • 物品的大小和背包容量都可能很大,不能用常规的动态规划。
  • 物品可以不选,也可以全部选,选法数包括所有可能的子集。
  • 物品即使大小相同,也视为不同的物品。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页