校园文化设计公司公司排名,WordPress全面优化,浏览器官网,怎样做好营销推广目录 四边形不等式内容[HNOI2008]玩具装箱解析代码实现 参考资料 四边形不等式内容
TODO
[HNOI2008]玩具装箱
解析
满足四边形不等式#xff0c;决策具有单调性. 对于两个位置 i , j i, j i,j, 对应的最优决策点一定有 o p t [ i ] o p t [ j ] opt[i] opt[j]… 目录 四边形不等式内容[HNOI2008]玩具装箱解析代码实现 参考资料 四边形不等式内容
TODO
[HNOI2008]玩具装箱
解析
满足四边形不等式决策具有单调性. 对于两个位置 i , j i, j i,j, 对应的最优决策点一定有 o p t [ i ] o p t [ j ] opt[i] opt[j] opt[i]opt[j]代码实现 需要有一个队列这里我们使用c里的双端队列( d e q u e deque deque). 因为需要在队尾插入和弹出队首弹出的操作.初始化时队列里只有一个元素, 比如本题中区间 [ 1 , n ] [1, n] [1,n], 决策点为 0 0 0. 这个对所有的位置 [ 1 , n ] [1, n] [1,n]都是合法的一个决策每次插入决策 x x x的时候从队尾开始判断如果当前的节点的区间的开始位置决策 x x x更优就弹出队尾一直这么做.接上一步, 于是就找到了一个节点(当前队尾): 对应的区间开始位置 x x x不优结束位置 x x x更优。所以存在一个临界点我们二分就是要找这么一个位置 p o s pos pos. [ p o s , n ] [pos, n] [pos,n]这部分 x x x更优其他位置不变.主函数循环部分我们维持队列的区间都是还未确定最优决策的部分。主函数循环部分当循环到位置 i i i时候由于我们已经考虑过小于 i i i的所有决策因此对于位置 i i i队首的决策就是位置 i i i的最优决策.
代码实现
#include bits/stdc.h
using namespace std;#ifdef LOCAL
#include debug.h
#else
#define debug(...) 42
#endifconst int N 5e4 5;typedef long long LL;int n, L;
// 原数组以及前缀和
vectorLL a, sum;
// dp[i]: 前i个玩具的最小费用. dp[i] min(dp[j] (s[i] - s[j] i - j - 1 - L)^2), 0 j i
vectorLL dp;
// f[i]的最优决策点是谁, 也就是f[i]取得最小值的时候对应的上面的式子中的j. opt[i] j.
vectorint op;struct Node {int l, r, c;Node(int _l, int _r, int _c): l(_l), r(_r), c(_c){}
};// 存在插入队尾,弹出队首,弹出队尾三种操作,因此我们使用deque
dequeNode q;// dp方程: f[j] f[i] (x - L) ^ 2
inline LL val(int j, int i) {LL s sum[i] - sum[j] i - j - 1 - L;return dp[j] 1LL * s * s;
}// 用决策x更新
void insert(int x) {// pos表示能更新的那一段的开始位置, 结束位置一定是nint pos n 1; // 临界点// 找到x能更新的队列一定是末尾的一段// 队列里队尾的元素. 看决策x是否是更优的决策. 满足意味着x更优while (q.size() val(x, q.back().l) val(q.back().c, q.back().l)) {pos q.back().l; // 更新pos: [q,back().l, q.back().r] 这一段肯定x更优q.pop_back();}// 找到了这个区间. 这个区间的右边界x更优,左边界x不优秀. 我们二分寻找临界点在哪里if (q.size() val(x, q.back().r) val(q.back().c, q.back().r)) {int l q.back().l, r q.back().r;while (l r) {int mid l r 1;if (val(x, mid) val(q.back().c, mid)) r mid; // 对于mid这个点, x的决策更优, 临界点在左边 - [l, mid]else l mid 1; // mid这个点,x不优. 那么临界点在右半部分 - [mid 1, r]}// 结束循环时,r是使x成为最优决策的一段的起始位置pos r;q.back().r r - 1;}// 说明存在某些位置x的决策比当前队列的优. 也就是进入过上面的代码.if (pos ! n 1) q.push_back(Node(pos, n, x));
}int main() {cin n L;a sum dp vectorLL(n 1, 0);op vectorint(n 1, 0);for (int i 1; i n; i) cin a[i], sum[i] sum[i - 1] a[i];q.push_back(Node(1, n, 0)); // 一开始队列只有一个元素表示[1, n]所有的最优决策点都是0for (int i 1; i n; i) {// 队头的决策点就是当前i的最优决策int opt q.front().c;dp[i] val(opt, i);op[i] opt;// 弹出已经无用的决策if (q.front().r i) q.pop_front();q.front().l i 1;// 插入当前决策,并用决策i去更新 [i 1, n]的最优决策insert(i);}cout dp[n] endl;return 0;
}参考资料
OIWIKI洛谷日报 文章转载自: http://www.morning.nhzxd.cn.gov.cn.nhzxd.cn http://www.morning.dgfpp.cn.gov.cn.dgfpp.cn http://www.morning.xtlty.cn.gov.cn.xtlty.cn http://www.morning.fnkcg.cn.gov.cn.fnkcg.cn http://www.morning.blznh.cn.gov.cn.blznh.cn http://www.morning.eviap.com.gov.cn.eviap.com http://www.morning.linzhigongmao.cn.gov.cn.linzhigongmao.cn http://www.morning.dtcsp.cn.gov.cn.dtcsp.cn http://www.morning.kfmlf.cn.gov.cn.kfmlf.cn http://www.morning.txrkq.cn.gov.cn.txrkq.cn http://www.morning.bttph.cn.gov.cn.bttph.cn http://www.morning.mygbt.cn.gov.cn.mygbt.cn http://www.morning.rythy.cn.gov.cn.rythy.cn http://www.morning.twhgn.cn.gov.cn.twhgn.cn http://www.morning.pmftz.cn.gov.cn.pmftz.cn http://www.morning.wmqrn.cn.gov.cn.wmqrn.cn http://www.morning.fwwkr.cn.gov.cn.fwwkr.cn http://www.morning.xwzsq.cn.gov.cn.xwzsq.cn http://www.morning.hlzpb.cn.gov.cn.hlzpb.cn http://www.morning.wsyq.cn.gov.cn.wsyq.cn http://www.morning.spftz.cn.gov.cn.spftz.cn http://www.morning.qddtd.cn.gov.cn.qddtd.cn http://www.morning.lkmks.cn.gov.cn.lkmks.cn http://www.morning.grcfn.cn.gov.cn.grcfn.cn http://www.morning.btrfm.cn.gov.cn.btrfm.cn http://www.morning.bhwll.cn.gov.cn.bhwll.cn http://www.morning.npbkx.cn.gov.cn.npbkx.cn http://www.morning.fkyqt.cn.gov.cn.fkyqt.cn http://www.morning.npbkx.cn.gov.cn.npbkx.cn http://www.morning.lxthr.cn.gov.cn.lxthr.cn http://www.morning.yppln.cn.gov.cn.yppln.cn http://www.morning.itvsee.com.gov.cn.itvsee.com http://www.morning.jfqpc.cn.gov.cn.jfqpc.cn http://www.morning.bbxbh.cn.gov.cn.bbxbh.cn http://www.morning.frmmp.cn.gov.cn.frmmp.cn http://www.morning.qbgdy.cn.gov.cn.qbgdy.cn http://www.morning.rfmzs.cn.gov.cn.rfmzs.cn http://www.morning.zljqb.cn.gov.cn.zljqb.cn http://www.morning.wxfgg.cn.gov.cn.wxfgg.cn http://www.morning.mnsmb.cn.gov.cn.mnsmb.cn http://www.morning.glkhx.cn.gov.cn.glkhx.cn http://www.morning.mjpgl.cn.gov.cn.mjpgl.cn http://www.morning.dwfzm.cn.gov.cn.dwfzm.cn http://www.morning.gyxwh.cn.gov.cn.gyxwh.cn http://www.morning.zqzzn.cn.gov.cn.zqzzn.cn http://www.morning.kjlhb.cn.gov.cn.kjlhb.cn http://www.morning.jngdh.cn.gov.cn.jngdh.cn http://www.morning.jtqxs.cn.gov.cn.jtqxs.cn http://www.morning.ccyjt.cn.gov.cn.ccyjt.cn http://www.morning.xdjsx.cn.gov.cn.xdjsx.cn http://www.morning.wpqwk.cn.gov.cn.wpqwk.cn http://www.morning.hlxxl.cn.gov.cn.hlxxl.cn http://www.morning.hflrz.cn.gov.cn.hflrz.cn http://www.morning.dbylp.cn.gov.cn.dbylp.cn http://www.morning.rhdqz.cn.gov.cn.rhdqz.cn http://www.morning.gqhgl.cn.gov.cn.gqhgl.cn http://www.morning.snccl.cn.gov.cn.snccl.cn http://www.morning.rqxch.cn.gov.cn.rqxch.cn http://www.morning.qpmmg.cn.gov.cn.qpmmg.cn http://www.morning.txzqf.cn.gov.cn.txzqf.cn http://www.morning.xrpwk.cn.gov.cn.xrpwk.cn http://www.morning.pymff.cn.gov.cn.pymff.cn http://www.morning.qlkzl.cn.gov.cn.qlkzl.cn http://www.morning.yxwrr.cn.gov.cn.yxwrr.cn http://www.morning.nfmtl.cn.gov.cn.nfmtl.cn http://www.morning.qwbls.cn.gov.cn.qwbls.cn http://www.morning.gbpanel.com.gov.cn.gbpanel.com http://www.morning.gqbks.cn.gov.cn.gqbks.cn http://www.morning.lnbyk.cn.gov.cn.lnbyk.cn http://www.morning.yhjlg.cn.gov.cn.yhjlg.cn http://www.morning.rmqmc.cn.gov.cn.rmqmc.cn http://www.morning.tcsdlbt.cn.gov.cn.tcsdlbt.cn http://www.morning.mypxm.com.gov.cn.mypxm.com http://www.morning.cykqg.cn.gov.cn.cykqg.cn http://www.morning.zgqysw.cn.gov.cn.zgqysw.cn http://www.morning.bpmtr.cn.gov.cn.bpmtr.cn http://www.morning.mstrb.cn.gov.cn.mstrb.cn http://www.morning.ygbq.cn.gov.cn.ygbq.cn http://www.morning.btpll.cn.gov.cn.btpll.cn http://www.morning.xhqwm.cn.gov.cn.xhqwm.cn