zoukankan      html  css  js  c++  java
  • 省选模拟83 题解

    A. table

    首先考虑怎么暴力 dp,然后发现难点在于怎么知道不受影响的格点的个数。

    其实特殊之处在于碰到矩形边界之后没办法计数,所以考虑枚举在哪个位置碰到了矩形边界。

    然后发现每次转移是类似的,只要求 $a$ 次向下走,$b$ 次向右走,$c$ 次在边界上走能贡献的总的权值。

    其实等价于求所有满足 $x_1+...+x_a+y_1+...+y_b+z_1+...+z_c=S$ 的序列的权值 $x_1*...*x_a*(y_1+1)*...*(y_b+1)$ 的权值和。

    其中 $x,y,z$ 的取值都可以是 $0$ ,然而容易发现如果 $x$ 在取值为 $0$ 的时候不产生贡献,可以钦定取值至少为 $1$ 。

    然后把 $y+1$ 这个东西转化一下,给等号的右边加上一个 $b$ ,现在的权值就变成了 $x_1*...*x_{a+b}$,这个可以直接用插板来计算。

    然后发现其实是左右分别插板,然后组合数的形式是 $sum limits_{i=-infty}^{infty}inom{a+i}{b}inom{c-i}{d}$。

    这个东西可以转化为在枚举集合的划分点,所以组合数就等于 $inom{a+c+1}{b+d+1}$,然后只要考虑一下没有被经过的点的贡献、经过的不同路径产生的方案数的贡献就好了。

    B. remove

    直接用完全图的话,没有办法进行 dp。

    然后有这样一个结论:原题等价于求最大独立集。

    证明的话可以考虑首先答案是要大于等于最大独立集的。

    然后把最大独立集中的每一个元素都先选中,可以考虑如果加入两个不在最大独立集中的元素之后不能形成团,那就说明新加的两个元素之间没有边。

    如果这样的话,可以用这新加的两个元素替换原最大独立集中的元素,那么最大独立集可以扩大,就不是最大独立集。

    可以考虑把每个符卡都按照左上角的坐标排序,然后最大独立集是不难 dp 的。

    转移的条件就是两个右端点分别小于两个左端点。

    因为上方的左端点是递增的,可以用堆来动态插入可以进行转移的点。

    下方的偏序关系用树状数组维护即可。

    C. road

  • 相关阅读:
    hdu 1455 N个短木棒 拼成长度相等的几根长木棒 (DFS)
    hdu 1181 以b开头m结尾的咒语 (DFS)
    hdu 1258 从n个数中找和为t的组合 (DFS)
    hdu 4707 仓鼠 记录深度 (BFS)
    LightOJ 1140 How Many Zeroes? (数位DP)
    HDU 3709 Balanced Number (数位DP)
    HDU 3652 B-number (数位DP)
    HDU 5900 QSC and Master (区间DP)
    HDU 5901 Count primes (模板题)
    CodeForces 712C Memory and De-Evolution (贪心+暴力)
  • 原文地址:https://www.cnblogs.com/skyh/p/12803271.html
Copyright © 2011-2022 走看看