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

  • 相关阅读:
    关于Certificate、Provisioning Profile
    苹果开发者账号类型
    在 iTunes Connect 中,无法找到“My Apps”选项
    iOS 开发,相关网址
    dart 使用
    initState 必须调用 super.initState(); 否则报错
    TabBar 设置可滚动:isScrollable: true
    flutter 从创建到渲染的大体流程
    获取对象State的方法
    beforeRouteEnter 与 beforeRouteUpdate(watch $route 对象) 的区别
  • 原文地址:https://www.cnblogs.com/skyh/p/12803271.html
Copyright © 2011-2022 走看看