zoukankan      html  css  js  c++  java
  • 省选/NOI刷题Day2

    bzoj2616 放一个车的时候相当于剪掉棋盘的一行,于是就可以转移了,中间状态转移dp套dp,推一下即可

    bzoj2878 环套树期望dp 手推一下递推式即可

    bzoj3295 树状数组套权值线段树

    NOI2002贪吃的九头龙 多叉转二叉 水过

    bzoj1495 方程就是f[i,j,k]表示以i为根,叶节点有jA,所有的父节点状态为k的最佳值,然后方程就出来了f[i,j,k] = min(Σf[son,j1,k1]),其中Σj1=jk1k加上i的状态。然后把后两维用一个数压一下保存就好了...奇怪的状压

    hdu1561 有树状依赖的背包问题...写起来很奇怪

    清华集训2015 V 线段树裸题

    uoj #48 分类讨论O(1)题

    uoj #67 Tarjan找割点,删掉不是割点的点使图满足条件就好了

    ZJOI2016 线段树 

         题意就是求每个数在所有方案中的最终值的和。显然一个数经过若干次变化一定会变成另外一个数,那么离散化后,令g[i][j]表示i这个数最终变成从小到大第j个的方案数。一个直观的思路是,我们枚举j,那么显然g[i][j]>0的i的范围是(l,r),其中a[l]和a[r]是第j大的数两侧分别第一个大于这个从小到大第j个数的数(由于是随机因此可以假定没有两个数相同)。此时,

           如果令f[k][x][y]表示经过k轮后,恰好是[x,y]这个范围内的数都变成了从小到大第j个数的方案数。但是这样会存在问题,就是如果某一轮的操作跨过了l或r,就会造成[l,r]中某一些数>从小到大第j个数,这样再转移就会出错。

           那么(根据jry老司机的博客)令f[k][x][y]表示经过k轮后,恰好[x,y]这个范围内的数都<=从小到大第j数的方案数,这样就可以转移了。显然f[k][x][y]必然由f[k][u(u<x)][y]和f[k][x][v(v>y)],然后操作任意[t(t<l),u]和[v,t(t>r)]得到;或者直接由f[k][x][y],然后任意一个操作[u,v],其中[u,v]∩[x,y]=0得到。

           然后重新领g[i][j]表示第i个数最终<=从小到大第j个数的方案数,然后减一减即可。

           后来有一个卡常的技巧是每一轮都用long long暴力加起来,这一轮结束的时候再取模。这样瞬间应该可以快很多。

  • 相关阅读:
    如何用Android Studio打多包名APK
    EventBus框架在Android多Pane(Fragment)中的应用
    Android WebView使用深入浅出
    dp和px转换
    android button minheight问题
    Java链式编程接口
    Java多线程共享变量控制
    一致性Hash算法
    ARP (地址解析协议)
    FTP下载导致Zip解压失败的原因
  • 原文地址:https://www.cnblogs.com/Kong-Ruo/p/8074018.html
Copyright © 2011-2022 走看看