摘要:
区间 \(DP\) 定义: 区间类动态规划是线性动态规划的拓展,它在分阶段地划分问题时,与阶段中元素出现的顺序和由前一阶段的哪些元素合并有很大关系。 操作: 定义 \(f[i][j]\) 表示将下标位置 \(i\) 到 \(j\) 的所有元素合并能获得的价值的最大值。 \(f[i][j]=max(f 阅读全文
摘要:
背包 \(dp\) 定义: 选择一组有每一组的贡献值,有选择的上限,询问贡献值的题目 分类: \(0/1\) 背包: 这里需要注意一下的就是节省一维,需要倒序枚举的 \(O(nw(背包上限))\) 的写法: for(int i=1;i<=n;i++) for(int j=W;j>=w[i];j--) 阅读全文
摘要:
CF372C Watching Fireworks is Fun 题意: 城镇中有 \(n\) 个位置,有 \(m\) 个烟花要放。第 \(i\) 个烟花放出的时间记为 \(t_i\) ,放出的位置记为 \(a_i\) 。如果烟花放出的时候,你处在位置 \(x\),那么你将收获 \(b_i-|a_i 阅读全文
摘要:
[HEOI2013]Eden 的新背包问题 题意: 多重背包,但是每一个询问会有一种物品不能选,询问最大价值。 分析: 首先进行二进制拆分是肯定的,但是这样直接算肯定不行。 我们回想起来原先 \(dp\) 状态的设定: \(dp[i][j]\) 表示选到第 \(i\) 个物品,背包上限为 \(j\) 阅读全文
摘要:
upper/lower_bound 的用法: 这俩都是利用二分查找的方法在一个排好序的数组(可以是各种数据结构,如 \(map\) 之类的)中进行查找的。 数组从小到大: lower_bound(begin,end,num); 找第一个 \(\geq num\) 的数字,返回地址,不存在则返回 \( 阅读全文
摘要:
折半搜索 引入: 一般来说,很多元素少的题都可以用暴力搜索直接写。 比如说枚举每个点的使用情况...每个物品的使用....这类问题,时间复杂度为 \(O(2^n)\) 但是,当给定的 \(n\) 变大时,我们应该怎么办,这就引出了折半搜索( \(meet in the middle\) ). 定义: 阅读全文