0%

2026 杭电春季联赛 3——1003-3X3安全箱

题目大意

题目描述
有一个大小为 3×33 \times 3 的矩形安全箱。
共有 nn 件物品,第 ii 件物品的大小为 ai×bia_i \times b_i(可以水平放置或旋转 9090^{\circ}),价值为 viv_i
你需要选择若干件物品放入安全箱内,物品必须完全在箱子内部且互相之间不能有重叠部分。
求能够放入安全箱内物品的最大总价值。

输入格式
第一行输入一个整数 TT1T100001 \le T \le 10000),表示测试数据的组数。
对于每组数据:
第一行输入一个正整数 nn1n1061 \le n \le 10^6),表示物品的数量。
接下来 nn 行,每行输入三个整数 ai,bi,via_i, b_i, v_i1ai,bi3,1vi1081 \le a_i, b_i \le 3, 1 \le v_i \le 10^8),分别代表第 ii 件物品的长、宽和价值。
保证所有测试组的 nn 之和不超过 10610^6

输出格式
对于每组数据,输出一行一个整数,表示最大的总价值。

样例输入

1
2
3
4
5
6
7
8
9
10
2
5
2 3 20
1 3 5
1 2 4
1 1 4
1 3 6
2
1 1 13141314
3 3 6947311

样例输出

1
2
28
13141314

样例解释第一组数据:最优策略是放入第 11 件物品(大小 2×32 \times 3,价值 2020)、第 33 件物品(大小 1×21 \times 2,价值 44)以及第 44 件物品(大小 1×11 \times 1,价值 44)。第 11 件物品占用 2×32 \times 3 的空间后,安全箱还会剩余 1×31 \times 3 的空白区域,恰好可以无重叠地容纳第 33 件和第 44 件物品。总价值为 20+4+4=2820 + 4 + 4 = 28
第二组数据:虽然第 22 件物品(大小 3×33 \times 3,价值 69473116947311)能正好填满整个安全箱,但只放入第 11 件物品(大小 1×11 \times 1,价值 1314131413141314)可以获得更高的总价值。因此最优选择是仅放置第 11 件物品,最大总价值为 1314131413141314

思路讲解

不难发现,一共只有 21 种有效状态。

开个玩笑,这个是提前用 dfs 跑出来的,直接打表,跳过这个预处理。

image

那你都预处理出来所有的这个情况了,做起来就很简单了。

AC代码

AC
https://acm.hdu.edu.cn/contest/view-code?cid=1199&rid=13515

心路历程(WA,TLE,MLE……)

常见 dfs 错误及原因