偏序关系与dp BZOJ3594(二维树状数组)

传送门

偏序关系

二维树状数组

这个题用dp[i][j]表示前i个数,以h[i]结尾,用了j次修改,最长的非递减序列。

但是这样直接dp的话如下

for(int i=1; i<=n; i++){
        for(int j=0; j<=K; j++){
            for(int a=0; a<i; a++){
                for(int b=0; b<=j; b++){
                    if(h[i]+j-b>=h[a])
                        dp[i][j]=max(dp[i][j], dp[a][b]+1);
                }
            }
        }
    }

会超时。这个题巧妙的利用偏序关系,用二维树状数组将时间优化到n*k*logn*logk。

如果可以转移的话必须要满足h[i]+j-b>=h[a]的条件,也就是h[i]+j>=h[a]+b,前提是i>a,j>=b,这就有三个不等式,我们i是从前往后遍历所以i>a不予考虑,剩下

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值