bzoj4368 IOI2015 boxes纪念品盒 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=4368 数据范围:略. 题解: 如果在一个最优方案中,一个点$i$是这个人拿东西从左侧走过来的,我们就说这个点是蓝的. 如果是右侧的,就说这个点是红. 我们发现,并不存在三个可以不连续的点,满足红蓝红. 即,一定存在一个点$i$,满足$1\sim i$的点是蓝的,$i + 1\sim n$是红的. 接着我们维护一个$dp$状态:$f_i$,表…
题面 解析 可以发现,发纪念品有三种方式: 从左边走再原路返回. 从右边走再原路返回. 走一圈. 注意到,第三种走法最多只会走一次, 因为如果走了多次,那发放的物品数量就会>=\(2k\), 那么一定有半边的数量>=\(k\). 因此就可以转化为一次1/2操作加一次3操作(先发掉\(k\)个). 那么我们可以先DP一下1/2操作发前\(i\)个纪念品所用的时间\(f1[i]/f2[i]\), 那没有3操作的时间就是f1+f2, 考虑走一圈的情况,枚举从左边走发的纪念品数更新答案即可. code…
4368: [IOI2015]boxes纪念品盒 链接 分析 链接 代码 #include<bits/stdc++.h> using namespace std; typedef long long LL; inline int read() { ,f=;; +ch-';return x*f; } ; int s1[N],s2[N],p1,p2; LL f1[N],f2[N]; //- int main() { int n = read(),k = read(),L = read(); ; i…
BZOJ 4368: [IOI2015]boxes纪念品盒 BZOJ传送门 Description IOI2015开幕式正在进行最后一个环节.按计划在开幕式期间,每个代表队都将收到由主办方发放的一个装有纪念品的盒子.然而所有志愿者都被精彩的开幕式所吸引,除Aman外其他人完全忘记了发放纪念品这件事.Aman是一位热情的志愿者,为使得IOI尽量圆满,他要用最短的时间将所有纪念品发放出去. 开幕式的场地是一个圆环,被分为 个完全相等的区域,这些区域的编号依次为 到,也就是说,对于0≤i≤L-2,区域…
问题描述 IOI2015 开幕式正在进行最后一个环节.按计划在开幕式期间,每个代表队都将收到由主办方发放的一个装有纪念品的盒子.然而所有志愿者都被精彩的开幕式所吸引,除 Aman外其他人完全忘记了发放纪念品这件事.Aman 是一位热情的志愿者,为使得 IOI 尽量圆满,他要用最短的时间将所有纪念品发放出去. 开幕式的场地是一个圆环,被分为 个完全相等的区域,这些区域的编号依次为 0 到 L-1,也就是说,对于 0≤i≤L-2,区域 i 与区域 i+1 相邻,且区域 L-1 与区域 0 相邻.场地…
三种路径,左边出去左边回来,右边出去右边回来,绕一圈 绕一圈的路径最多出现一次 那么绕一圈的路径覆盖的点一定是左边半圈的右边和右边半圈的左边 枚举绕一圈的路径的起始点(一定要枚举,这一步不能贪心),更新答案 #include<cstdio> #include<algorithm> using namespace std; int a[10000005],X[10000005],Y[10000005]; long long L[10000005],R[10000005]; bool…
题意:给定一个环,环上有一些点包裹,你要从 $0$ 号点出发,然后每次带上一个容量为 $k$ 的背包. 问:如果要把所有的包裹都带回 $0$ 好点最少要走多少距离. 每一次只有 $3$ 种走法:走整圆,没走到半圆就返回(两个方向) 而我们可以贪心证明我们最多只会走一次整圆: 如果我们要走 $2$ 次或两次以上整圆的话说明要拿的物品肯定 $>2k$ 个. 而背包的容量是有限的:只能装 $k$ 个. 所以这么走是不如先装物品多的那一侧半圆,然后再跑一次整圆. 然后就好做了:直接对每一侧半圆求取前 $…
[BZOJ2442]修建草坪(动态规划,单调队列) 题面 权限题..洛谷 题解 设\(f[i]\)表示前\(i\)个里面选出来的最大值 转移应该比较显然 枚举一个断点的位置,转移一下就好 \(f[i]=max(f[j-1]+s[j]-s[i])\) 所以可以单调队列优化一下 (不优化用各种玄学可以拿90分...) #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #…
[BZOJ1855]股票交易(动态规划,单调队列) 题面 BZOJ 题解 很显然,状态之和天数以及当天剩余的股票数有关 设\(f[i][j]\)表示第\(i\)天进行了交易,剩余股票数为\(j\)的最大获利 每次枚举可以转移过来的天数以及股票数 再枚举买入或者卖出的数量, 时间复杂度\(O(T^2Mp^2)\),30pts(但是有40pts...) #include<iostream> #include<cstdio> #include<cstdlib> #includ…
[CF1133E]K Balanced Teams(动态规划,单调队列) 题面 CF 让你把一堆数选一些出来分成不超过\(K\)组,每一组里面的最大值和最小值之差不超过\(5\),求最多有多少个人元素可以被分组. 题解 设\(f[i][j]\)表示把前\(i\)个数分成\(j\)组的最多人数. 然后单调队列转移一下完了. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring&g…