省选/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暴力加起来,这一轮结束的时候再取模。这样瞬间应该可以快很多。

转载于:https://www.cnblogs.com/Kong-Ruo/p/8074018.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值