zoukankan      html  css  js  c++  java
  • 省选模拟二十七 题解

    T1
    题目中给了很多的限制,所以大胆猜测当进行到一定的轮数后概率就会小于1e-6

    所以考虑枚举轮数,之后通过$dp$来求当前轮每个人的获胜概率

    设$dp[i][j]$代表$i$轮后初始位置在$j$的人的走到$n$的概率

    $dp[i][j]=sumlimits_{k=1}^{6}frac{dp[i-1][a[min(n,j+k)]]}{6}$

    最后的除以$6$最好在外面除,否则常数会大很多

    同时记录一个$p$代表还有多少的概率没成功,当$p<eps$时直接$break$

    每轮的复杂度是$O(n*6+m)$

    T2

    考虑容斥:

    设总集为$T$

    假如所有的串已经确定

    那么这种情况的贡献就是

    $ans=sumlimits_{Ssubseteq T并且S eq空集 }(-1)^{|S|-1}*maxpre{S}$

    $maxpre(S)$代表$S$集合的最长公共前缀

    所以现在问题转化为了求ans及其方案数

    直接$2^n$枚举$S$后$dp$即可

    T3

    首先一个雷达要建一定是往高了建,因为收益的函数是不降的

    可以考虑每次高度加一,那么最差情况下这次的增加面积等于上次增加面积

    而花费是固定的,所以每个雷达只能选${0,1}$

    又发现每个雷达修好之后在最优测略下最多和一个前面的雷达产生交集

    (原来的交集全部算最后一个覆盖它的雷达上)

    那么现在就可以按$x_i$排好序后$dp$了

    设$dp_i$代表最后一个选$i$的最大收益的四倍(为了不出现小数)

    设$L_i=x_i-y_i,R_i=x_i+y_i,w_i=4*y_i^2-4c_i*y_i$

    $1>R_j<L_i dp_i=max(dp_j+w_i)$

    $2>R_j>=L_i dp_i=max(dp_j+w_i-(R_j-L_i)^2)$

    复杂度$O(n^2)$

    第一个转移直接用树状数组维护

    第二个里面又$i$的部分,假如存在两个合法转移点$j<k$

    且$dp_j-(R_j-L_i)^2<dp_k-(R_k-L_i)^2$

    移项后发现随着L的增大k一定仍然更优

    所以具有决策单调性,用单调栈维护决策点即可

    复杂度$O(nlog_2(n))$

  • 相关阅读:
    jquery基础
    js知识-进阶
    css样式介绍
    html基础知识介绍
    样式初识-基本样式介绍
    数据库之mysql的基本操作
    python基础-UDP、进程、进程池、paramike模块
    python基础--接口与归一化设计、封装、异常、网络编程
    Python学习之路—2018/6/25
    Python学习之路—2018/6/20
  • 原文地址:https://www.cnblogs.com/AthosD/p/12342262.html
Copyright © 2011-2022 走看看