zoukankan      html  css  js  c++  java
  • unsolved question's solution

    因为很懒,没有时间,只会口胡等等原因,所以有些题目就不打code了

    $luogu:$


     

    P1973 [NOI2011]Noi嘉年华

    时间离散化,预处理一个区间$[l,r]$内的最多活动个数$in[l][r]$

    无限制:

    设$f[i][j]$表示到第$i$个时间点,第一个会场开$j$个活动时,第二个会场的最大活动数量

    $f[i][j]=max(f[k][j-in[k][i]],f[k][j]+in[k][i])$

    有限制:

    时间分成三段,上面的dp倒着跑一遍得出$g[i][j]$

    枚举必须取区间$[l,r]$的最大贡献$h[l][r]$,再枚举左边取$x$个,右边取$y$个

    $h[l][r]=min(x+in[l][r]+y,f[l][x]+g[r][y])$

    注意到$x$递增时,$f[l][x]$递减。所以$g[r][y]$只能递增,即$y$必须递减,具有单调性

    $y$用指针维护,复杂度降至$O(n^3)$


    P3188 [HNOI2007]梦幻岛宝珠

    $a,b$很小,考虑对$b$分层后合并求解。

    设$f[i][j]$表示代价为$a*b^i$的物品,占用$j*b^i$空间,跑01背包

    合并时,$f[i][j]$表示代价为$a*b^{0 sim i}$的物品,占用$j*b^i+(w$&$(2^i-1))$($w$二进制下的前$i-1$位)的空间

    $f[i][j]=max(f[i][j],f[i][j-k]+f[i-1][min(s[i-1],k*2+(m$&$2^{i-1})])$,$s[i]$为前$i$层物品体积和$/2^i$

    因为$j$倒序枚举,此时$f[i][j-k]$还是指占用$(j-k)*b^i$的空间

    答案即为$f[m][1]$,$m$为$W$的二进制位数


     

    $others:$


    hihocoder1954 : 压缩树 :

    操作可离线,贡献可根据祖先递推。

    dfs序+$multiset$维护动态虚树

    插入新操作(节点)时,对与前驱后缀的$lca$分类讨论,取深度大的点。

    该点与lca之间的这一段就是新加入的贡献。

  • 相关阅读:
    常见DOS命令
    前台传参到后台出现中文乱码问题
    Servlet.init() for servlet [spring-dispatcher] threw exception
    ES6-2
    ES6语法(一)
    JS区分对象类型
    ko数组
    sortable的基本属性
    MUI消息推送
    target和currentTarget
  • 原文地址:https://www.cnblogs.com/kafuuchino/p/11373677.html
Copyright © 2011-2022 走看看