zoukankan      html  css  js  c++  java
  • 【十二省联考 2019】皮配

    题意

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

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

    限制条件:

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

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

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

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

    有 $Tle 5$ 组数据。

    $cle nle 1000$,$kle 30$,$M=max{C_0,C_1,D_0,D_1}le 2500$,$ 1le s_ile min{M,10}$。

    题解

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

    50分

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

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

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

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

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

    k=0

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

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

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

    100分

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

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

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

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

  • 相关阅读:
    [自用] 数论和组合计数类数学相关(定理&证明&板子)
    OI回忆录?
    [UOJ310] 黎明前的巧克力
    [总结] 后缀自动机学习笔记
    [总结] 动态点分治学习笔记
    [HEOI2018] 秘密袭击coat
    [51nod1355] 斐波那契的最小公倍数
    [SRM601] WinterAndSnowmen
    [总结] 二项式反演学习笔记
    [Luogu4705] 玩游戏
  • 原文地址:https://www.cnblogs.com/scx2015noip-as-php/p/twelve2019_d2t1.html
Copyright © 2011-2022 走看看