• 一些题目(4)


    因为没多少时间所以挑几道最近做的有意思的题目写写。

    在 N*M 的方格中选出三个记为 A, B, C,要求任意两个不能在同一行或者同一列,定义其费用为 |AB|+|BC|+|AC|.(|AB| 表示 AB 两点之间的曼哈顿距离。)求费用在区间 [minT, maxT] 内的选择方案数。N, M <= 4000。

    我们可以考虑任意的三对坐标,$(x_1, y_1), (x_2, y_2), (x_3, y_3)$,如果我们淡化「点」的概念而只考虑坐标,假设 $x_1$ 是三个点的横坐标中最小的那个,$x_3$ 是最大的横坐标,$y_1$ 是最小的纵坐标,$y_3$ 是最大的纵坐标。其实很容易发现,$x_2$ 与 $y_2$ 对结果是没有影响的。则 $x_2$ 的取值范围是 $(x_1, x_3)$,$y_2$ 的取值范围是 $(y_1, y_3)$。而由三个横坐标和三个纵坐标可以确定出 $A_3^3$ 组三点对,所以对于一组 $x_1, y_1, x_3, y_3$,我们可以得到 $A_3^3 cdot (x_3-x_1+1)(y_3-y_1+1)$ 组三点对。

    但是如果直接枚举 $x_1, y_1, x_3, y_3$ 再判定是否合法显然不够快。在我们得到一组 $x_1, x_3, y_1, y_3$ 之后,由其构造出的三点对的费用为 $2(y_3-y_1)(x_3-x_1)$。从这个式子我们可以看出,某次选择的费用只与选择的三个点的「最大横坐标与最小横坐标之差」和「最大纵坐标与最小纵坐标之差」有关。那么我们直接枚举这两个差值即可。对于差值为 $delta$ 的一对 $x_1, x_3$,我们能够在所有方格中找到 $m - delta$ 组不同的 $x_1, x_3$。至此,问题解决。

    顺便一提,上述所谓「枚举差值」的本质就是枚举「能够恰好包含三个点的最小矩形的长和宽」。

    有两个人 A 和 B,初始分数都为 0。每次 A 可以选择任意一个任务做,一个难度为 $p$ 的任务,完成概率为 $frac{1}{2^p}$,完成后可以得到 $2^{p-1}$ 分,没有完成则不得分;每次 B 只能选择难度为 1 的任务去做。求在最优决策下 A 获胜的概率是多少。

    我们可以将 A 和 B 捆绑在一起分析,对于每一轮都可能有 4 种走向:A 完成了一个任务而 B 没有完成,A 没有完成而 B 完成了,A 完成了且 B 也完成了,A 和 B 都没有完成。设 $f(i, j)$ 为 A 当前得分 i 而 B 当前得分 j 时 A 获胜的概率,如果 A 选择了难度为 p 的任务,那么有

    $f(i, j) = frac{frac{1}{2}cdot frac{1}{2^p} cdot (f(i+2^{p-1}, j) + f(i+2^{p-1}, j+1)) +(1-frac{1}{2^p})cdot frac{1}{2}cdot f(i, j+1)+ (1-frac{1}{2^p}) cdot frac{1}{2} cdot f(i, j)}{4}$

    (放大看更清楚哟~)

    我们发现等式两边都出现了 $f(i, j)$,那么我们进行移项整理,就能得出 $f(i, j)$ 的计算式。(太长不打)

    然后枚举 A 当前做的任务难度 $p$,取最大值即可。

  • 相关阅读:
    关于SVN更新慢的解决方法
    用PS做法线,高光贴图的最简图文教程
    3dmax教程 人物+骨骼+蒙皮+动画教程
    django 模板视图,表单视图,各种视图
    django settings最佳配置
    groovy 弹出菜单
    python construct文档
    用powershell实现自动化操作
    如何用chrome扩展将网页变成黑底白字,用以保护视力
    打造基于CentOS7的xfce最简工作环境
  • 原文地址:https://www.cnblogs.com/lsdsjy/p/4065881.html
Copyright © 2020-2023  润新知