-
test20190320
全连
- (nleq 10^6) ,保证答案在 (long long) 范围内.
比较浅显的 (dp ?) 记 (f[i]) 表示考虑前 (i) 个音符,其中第 (i) 个被钦定选择,答案就是 (max f[i]).
- 转移: (f[i]=val[i]+max f[j],j<i,jleq i-t[i],j+t[j]leq i). 暴力转移是 (O(n^2)) 的.
- 转移有三个限制条件,第一个直接通过处理顺序解决,只有后两个需要考虑.如果把 (j,t[i]+j) 看做两维,显然可以用一棵主席树来维护.可惜这样做空间会爆掉.
- 仔细观察,最后一个条件 (j+t[j] leq i) 是有单调性的,若一个 (j) 对当前的 (i) 合法,那么它对后面的所有 (i) 都合法.
- 用一个堆记录一下还未产生贡献的 ((j,t[j]+j)) ,当前满足 (j+t[j]leq i) 时就让它产生贡献.
- 这样就只用在 (jleq i-t[i]) 中找最大值,用 (Fenwick-tree) 维护一下就可以了.时间复杂度为 (O(nlogn)) .
-
相关阅读:
读后感
周总结(五)【2019.7.292019.8.4】
周总结(六)【2019.8.52019.8.11】
“教室派”APP使用体验
ios的内存管理差异和iso6与以前内存管理的兼容
UITextView 和UILable 设置行间距
IOS 各种问题收藏贴
__bridge,__bridge_transfer和__bridge_retained
键盘事件的处理
JSONKit 使用示例
-
原文地址:https://www.cnblogs.com/jklover/p/10597928.html
Copyright © 2020-2023
润新知