首页 > 其他 > 详细

动态规划优化

时间:2018-10-21 12:43:47      阅读:154      评论:0      收藏:0      [点我收藏+]

bzoj2064 分裂

存在通解:把原始集合都合并,再一一拆开。

如果可以划分一些集合,使得原始集合和目标集合对应的小集合相等,那么可以节省操作次数。

ans=(n1-1)+(n2-1)-2*(x-1) x为划分的相同集合数。

n<=10,状压

另外,其实原始集合一个x,就是往右x步,目标集合一个y,就是往左y步。

那么,两个个集合对应和相等,就是走出去再回来、

f[S1][S2]表示,原始集合选择S1的元素,目标集合选择S2元素,最多可以凑成几个和相等的集合。也即能走多少个圈。

预处理集合对应的和。

转移枚举选择哪个元素(原始或者目标)2n复杂度。

枚举状态2^2n

所以,O(20*2^20)

 

bzoj3173[TJOI2013]最长上升子序列

题目的特点是,从1~N从小到大加入。

当然可以平衡树动态维护,但是不够优美。

回忆LIS的状态设计,f[]以i结尾LIS

那么,对于一个x,比x大的y一定不会出现在f[x]的方案中。

所以,我们可以把最终的序列求出来,然后求f[1~n]

然后,逆序输出,ansi,就是对权值为1~i的位置求f[]的最大值。

就是一个权值的前缀和。

 

至于求最终的序列,可以平衡树。但是可以倒序,用树状数组即可。

 

动态规划优化

原文:https://www.cnblogs.com/Miracevin/p/9824534.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!