博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[FJOI2018]领导集团问题
阅读量:6277 次
发布时间:2019-06-22

本文共 475 字,大约阅读时间需要 1 分钟。

dp[i][j],i为根子树,最上面的值是j,选择的最大值

观察dp方程

1.整体Dp已经可以做了。

2.考虑优美一些的做法:

dp[i]如果对j取后缀最大值,显然是不上升的分段函数

而段数就是子树sz

树形Dp的时候,子树之间可以直接把分段函数按位相加。对于<=w[x]的,可以额外获得从dp[i][w[x]]+1得到的转移

1.用map维护,启发式合并,但是合并整体加上一些数不能维护具体值,所以维护差分值!

2.额外转移,找到前驱p,p+1到w[x]整体+1,差分数组上,就是dp[x][w[x]]++,dp[x][p]--

任何时候,如果键值变成0,必须删除。否则第二问就错了。

 

分段函数、整体Dp都是基于整体上值域个数有限进行的trick

整体Dp运用线段树合并,还可以支持打标记,适用面其实更广。

分段函数,通常处理后缀最值,由于单调,通过记录差分数组可以O(1)进行区间加减,启发式合并。如果涉及区间函数平移操作,表现更为灵活。

 

转载于:https://www.cnblogs.com/Miracevin/p/10768514.html

你可能感兴趣的文章
Item 23 不要在代码中使用新的原生态类型(raw type)
查看>>
为网页添加留言功能
查看>>
JavaScript—数组(17)
查看>>
Android 密钥保护和 C/S 网络传输安全理论指南
查看>>
以太坊ERC20代币合约优化版
查看>>
Why I Began
查看>>
同一台电脑上Windows 7和Ubuntu 14.04的CPU温度和GPU温度对比
查看>>
js数组的操作
查看>>
springmvc Could not write content: No serializer
查看>>
Python系语言发展综述
查看>>
新手 开博
查看>>
借助开源工具高效完成Java应用的运行分析
查看>>
163 yum
查看>>
第三章:Shiro的配置——深入浅出学Shiro细粒度权限开发框架
查看>>
80后创业的经验谈(转,朴实但实用!推荐)
查看>>
让Windows图片查看器和windows资源管理器显示WebP格式
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
vim使用点滴
查看>>
embedded linux学习中几个需要明确的概念
查看>>