【十二省联考 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$,

转载于:https://www.cnblogs.com/scx2015noip-as-php/p/twelve2019_d2t1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值