1. 程式人生 > >10.16多校連測

10.16多校連測

T1

題意簡述

給出一個集合,都有權值,求可以被分割成權值和相等的兩份的子集個數。

題解

f [ i ] [ S ]

f[i][S] 表示搜尋到前 i i 個, S S 是一個3進位制狀態,0表示沒有被選中,1表示被第一個集合選中了,2表示被第二個集合選中了, f
f
是第一個集合與第二個的差值,如果差值為0說明是兩個相等的子集。這樣做顯然是 O ( 3 n ) O(3^n)
,會TLE。(這個我測的時候是想到了的)

考慮meet in the middle, O ( 3 n / 2 ) O(3^{n/2}) 列舉左邊, O ( 3 n / 2 ) O(3^{n/2}) 列舉右邊,和在一起是很好判斷的。

T2

題意簡述

給出一個排列 P P ,定義一個排列a是好排列,當且僅當依次交換排列 Q = 1 , 2 , 3 ,   , n Q={1,2,3,\cdots,n} a i , a i + 1 a_i,a_{i}+1 兩位,能得到排列 P P ,求好排列的個數。

題解

題目等價於:給出一些例如 i i i + 1 i+1 的前/後面的限制條件,問滿足限制的排列個數。(這個我還是想到了的)

這個用一個dp就可以解決。

T3

題意簡述

有一些物品,要裝到 k k 個行李中,現在有一個操作,每個行李 + k   m o d   p +k\bmod{p} 0 k < p 0\leq k<p ,求最重的行李最輕的重量。

題解

列舉 k k ,二分答案,時間複雜度 O ( n 2 log n ) O(n^2\log n) 會TLE(這個我還是想到了)

random_shuffle一下 k k 可能的取值,每次先判一下這個 k k 的取值可不可能使答案更優,時間複雜度是期望 O ( n P + n log n log P ) O(nP+n\log n\log P)