【杭电多校2020】Lead of Wisdom【搜索】【复杂度证明】

题意: n n n件物品,每种物品有一个种类 t i t_i ti,四个属性 a i , b i , c i , d i a_i,b_i,c_i,d_i ai,bi,ci,di,每个种类最多选一件物品,求

( 100 + ∑ a i ) ( 100 + ∑ b i ) ( 100 + ∑ c i ) ( 100 + ∑ d i ) (100+\sum a_i)(100+\sum b_i)(100+\sum c_i)(100+\sum d_i) (100+ai)(100+bi)(100+ci)(100+di)

的最大值

n , t i ≤ 50 , a i , b i , c i , d i ≥ 1 , T ≤ 10 n,t_i\leq 50,a_i,b_i,c_i,d_i\geq 1,T\leq 10 n,ti50,ai,bi,ci,di1,T10

显然对于有物品的种类一定会选一个

设种类 i i i的物品数为 c n t i cnt_i cnti。注意到 ∑ c n t i ≤ 50 \sum cnt_i\leq 50 cnti50,所以暴搜复杂度为 O ( ∏ max ⁡ ( 1 , c n t i ) ) O(\prod \max(1,cnt_i)) O(max(1,cnti))。根据小学奥数,最坏情况为 3 16 × 2 × 10 3^{16}\times 2\times 10 316×2×10,可以通过。

注意对于 c n t i = 0 cnt_i=0 cnti=0 i i i,如果在递归时跳到下一层,会把搜索树上下一层的结点复制一遍,而上面的最坏情况会复制 33 33 33次,会TLE。解决方法是在搜索前把没有物品的种类删掉。

代码略

你可能感兴趣的:(【杭电多校2020】Lead of Wisdom【搜索】【复杂度证明】)