Codeforces 1290 F Making Shapes
题目传送门
考虑等价转化题中的条件:发现只要向量的集合确定了,那么它们能组成的凸包也唯一确定,即对所有向量级角排序,从小到大添加向量。而一个向量集合是合法的,当且仅当对\(x\)这一维(\(y\)同理)\(\sum_{x_i>0}x_i=\sum_{x_i<0}-x_i\le m\)。由此原题转化为求集合\(\{ c_1,c_2,\cdots ,c_n\}\)满足\(\sum_{x_i>0}c_ix_i=\sum_{x_i<0}-c_ix_i\le m\)。
由于\(m\)的范围非常大,所以不能直接背包,此时就用到了数位\(DP\)的套路。
设\(dp[p][px][nx][py][ny][0/1][0/1]\)表示\([\text{二进制下到了第p位}][\text{x维正数的进位和}][\text{x维负数的进位和}][\text{y正}][\text{y负}][\text{x正之和是否>m}][\text{y正之和是否>m}]\)的方案数,转移只需枚举当前第\(p\)位需要加到\(\{c\}\)上的状态,记忆化搜索转移即可。
时间复杂度\(\mathcal O((4n)^4\cdot 2^n\cdot \log m)\)
Submission
求\(\sum_{i=1}^{n} a_ic_i = X\)的题目其中\(n\)很小\(X\)很大的可以考虑数位\(DP\),类似套路还有:HDU
Submission

浙公网安备 33010602011771号