【十二省联考 2019】皮配

题意

你有 $n$ 个集合,每个集合里有一些非负整数。

有 $4$ 个桶,现在要把每个非负整数放入其中 $1$ 个桶。

限制条件:

1. 同一集合的所有数要么都放入第 $1,2$ 个桶,要么都放入第 $3,4$ 个桶。

2. 有 $k$ 个数有特殊要求:不能放入前 $2$ 个桶或不能放入后 $2$ 个桶。

3. 设 $cnt_i$ 为第 $i$ 个桶放的数的总和,要求 $cnt_1+cnt_2\le C_0$,$cnt_3+cnt_4\le C_1$,$cnt_1+cnt_3\le D_0$,$cnt_2+cnt_4\le D_1$。

求满足限制条件的放置方案数膜 $998244353$。

有 $T\le 5$ 组数据。

$c\le n\le 1000$,$k\le 30$,$M=\max\{C_0,C_1,D_0,D_1\}\le 2500$,$ 1\le s_i\le \min\{M,10\}$。

 

题解

没错这道思维题只考了你 01 背包

50分

考虑暴力,不难发现由于每所学校只能在蓝、红阵营中选一个,再在鸭、R 派系中选一个,所以我们只需要记选择蓝派系的人数 和选择鸭派系的人数,就能对应一种各派系的人数情况了。总人数减去蓝派系的人数就是红派系的人数,总人数减去鸭派系的人数就是 R 派系的人数,可以不用记。

写成 $dp$ 就是 $dp(i,x,y)$ 表示前 $i$ 所学校中,蓝阵营得到了 $x$ 人,鸭派系得到了 $y$ 人。

把所有学校按城市排序,由于同城学校必须选择相同阵营,我们对每座城市先枚举其选择的阵营,再对该城市的学校做 $dp$。

转移时要注意一下 $x$ 和 $y$ 的上界,可以优化常数(不加可能会被卡时间)。

这就是 $O(n\times m^2)$ 的 $50$ 分 $dp$。

 

k=0

然后我们发现,一所学校选的阵营和派系并没有关系,只要记录阵营和派系各自的人数之和就行了。

于是 $dp$ 可以写成:$dp_1(i,j)$ 表示前 $i$ 所学校中,蓝阵营得到了 $x$ 人;$dp_2(i,j)$ 表示前 $i$ 所学校中,鸭派系得到了 $y$ 人。

两个 $dp$ 的每种人数状态相乘,在对其求和,就是方案数。

 

100分

将有限制的和无限制的分开算。

对于阵营,我们把带有限制的学校的城市与其它城市分开算。

对于派系,我们把有限制的学校与其它学校分开算。

有限制的这部分要维护二维信息 $dp$,

posted @ 2019-05-16 10:23  大本营  阅读(191)  评论(0编辑  收藏  举报