zoukankan      html  css  js  c++  java
  • NOIp2019前dp专题题解1.0

    luogu1373 小a和uim之大逃离:暴力dp的话就是记(dp_{i,j,p,q,0/1})表示当前在((i,j)),第一/二个人的数模(k+1),且当前轮到了第一/二个人的方案数。优化的话考虑答案统计(p=q)的方案数,那么可以把那两维省掉直接记两者差值,时间(O(NMK))

    luogu1220 关路灯 :注意到每次所有关掉的灯必然是一个连续区间,且人一定站在区间的两端,于是记(dp_{i,j,0/1})表示已经关掉区间([i,j])的灯,人站在最左/右端的最小花费,预处理出除掉每个区间外的所有灯的每一秒的花费,总时间(O(n^2))

    luogu1156 垃圾陷阱:记(dp_{i,j})表示前(i)堆垃圾,当前堆到了高度(j)的最大血量,转移的话考虑当前这一堆是吃掉还是堆起来,求解答案的话先找到(dp_{i,m})有值的时候(i)的最小值,否则就是(dp_{i,j})+第(i)堆垃圾出现时间的最大值

    luogu1273 有线电视网:树形背包模板题,把用户支出视为正,每条边花费视为负直接背包,时间是(O(n^2))(好像还有个log吧不记得了反正2500能过就对了)

    luogu1169 [ZJOI2007]棋盘制作:悬线法模板题,然而也可以写单调栈,时间复杂度(O(nm))

    luogu2577 [ZJOI2005]午餐:一个比较显然的贪心是我们把吃饭时间长的放到前面先行考虑,之后用一个类似于背包的设计状态,记(dp_{i,j})表示前(i)个人已经完成了,其中第一组打饭时间为(j)的最小吃完饭时间,依旧是枚举当前人放在哪一组进行转移

    luogu2051 [AHOI2009]中国象棋:问题等价于每一行和每一列放不多于两个炮的方案数,按照套路我们按行转移,同时为了兼顾列的条件,我们记(dp_{i,j,k})表示前(i)行,有(j)列有(1)个炮,有(k)列有两个炮的方案数,转移考虑第(i)行放0/1/2个炮,对每一种情况还要分它放在有0/1/2个棋子的列,时间(O(nm^2))

    Knapsack 2:直接对体积做背包显然会超时,我们需要将背包dp的状态定义由“相同体积的最大价值”转化成“相同价值的最小体积”,由于价值很小这样dp是可行的

    Sushi:记(dp_{i,j,k})表示剩下(i)(1),(j)(2),(k)(3)时吃完的期望,注意到每次掷骰子掷到有寿司的期望次数是(frac{n}{i+j+k}),先加上这个次数后再分类讨论三种情况,当然也可以列出掷出吃不到寿司的情况的期望之后移项解方程,实现的话当然是记忆化搜索了,时间(O(n^3))

    hdu6662:把每个点的点权看做(a_i-b_i),让这个问题变成第一个人最大化(sum a_i-sum b_i),另一个人要最小化这个值,记(g_{i,0/1})表示当前在点(i),只考虑向下走,当前取点(i)的是先/后手的差值,(f_{i,0/1})表示在(i)点的是先/后手,强制下一步往父亲走的差值,先找(g)在找(f),为了转移(f)需要储存(g)的最大/次大/最小/次小值,同时特判只有一个儿子的情况,代码在这里

    luogu3804:记(f_i)(1-i)已经放好了且必须在(i)放一个时的最大数量,考虑找到转移点的范围,记这个范围为([L_i,R_i].)对于限制([l,r]),转化成([l,r])中至少有一个且至多有一个,对于至少有一个,也就是(L_{r+1}=max(l,L_{r+1}));对于至多有一个,也就是(R_r=min(R_r,l-1)),最后对(L_I)取前缀(max),对(R_i)取后缀(min),单调队列优化即可

    CF998F:记(f_{i,j})为在位置(i)拿第(j)把伞的时候的最小花费((j=0)则未拿伞),转移分三种:1)之前拿了伞但是现在丢掉伞 ;2)一直拿着之前的伞;3)捡起一把伞;分类转移即可

  • 相关阅读:
    网络测量中基于Sketch方法的简单介绍
    Reading SBAR SDN flow-Based monitoring and Application Recognition
    Reading Meticulous Measurement of Control Packets in SDN
    Reading SketchVisor Robust Network Measurement for Sofeware Packet Processing
    ovs加dpdk在日志中查看更多运行细节的方法
    后缀数组
    (转载)LCA问题的Tarjan算法
    Codeforces Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) A. Checking the Calendar(水题)
    Vijos 1816统计数字(计数排序)
    卡特兰数
  • 原文地址:https://www.cnblogs.com/encodetalker/p/11330191.html
Copyright © 2011-2022 走看看