[题目描述:] 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河岸去追青蛙. 小河可以看作一列格子依次编号为0到N,琪露诺只能从编号小的格子移动到编号大的格子.而且琪露诺按照一种特殊的方式进行移动,当她在格子i时,她只移动到区间[i+l,i+r]中的任意一格.你问为什么她这么移动,这还不简单,因为她是笨蛋啊. 每一个格子都有一个冰冻指数A[i],编号为0的格子冰…
P1725 琪露诺 题目描述 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精.某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河岸去追青蛙.小河可以看作一列格子依次编号为0到N,琪露诺只能从编号小的格子移动到编号大的格子.而且琪露诺按照一种特殊的方式进行移动,当她在格子i时,她只会移动到i+L到i+R中的一格.你问为什么她这么移动,这还不简单,因为她是笨蛋啊.每一个格子都有一个冰冻指数A[i],编号为0的格子冰冻…
P1725 琪露诺 题目描述 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河岸去追青蛙. 小河可以看作一列格子依次编号为0到N,琪露诺只能从编号小的格子移动到编号大的格子.而且琪露诺按照一种特殊的方式进行移动,当她在格子i时,她只移动到区间[i+l,i+r]中的任意一格.你问为什么她这么移动,这还不简单,因为她是笨蛋啊. 每一个格子都有一个冰冻指数A[i],编…
P1725 琪露诺 单调队列优化dp 对于不是常数转移的dp转移,我们都可以考虑单调队列转移 然而我们要把数组开大 #include<cstdio> #include<algorithm> #include<iostream> using namespace std; int read() { int s=0,f=1; char in=getchar(); while(in<'0'||in>'9') { if(in=='-') f=-1; in=getcha…
二次联通门 : luogu P1725 琪露诺 /* luogu P1725 琪露诺 DP + 线段树 用线段树维护dp[i - R] ~ dp[i - L]的最大值 然后 转移方程是 dp[i] = max (dp[i - R], dp[i - R + 1], .... dp[i - L - 1], dp[i - L]) + number[i] */ #include <cstdio> #define Max 200009 #define INF 1e7 inline int max (in…
描述:https://www.luogu.com.cn/problem/P1725 小河可以看作一列格子依次编号为0到N,琪露诺只能从编号小的格子移动到编号大的格子.而且琪露诺按照一种特殊的方式进行移动,当她在格子i时,她只移动到区间[i+l,i+r]中的任意一格.你问为什么她这么移动,这还不简单,因为她是笨蛋啊. 每一个格子都有一个冰冻指数A[i],编号为0的格子冰冻指数为0.当琪露诺停留在那一格时就可以得到那一格的冰冻指数A[i].琪露诺希望能够在到达对岸时,获取最大的冰冻指数,这样她才能狠…
传送门啦 本人第一个单调队列优化 $ dp $,不鼓励鼓励? 琪露诺这个题,$ dp $ 还是挺好想的对不,但是暴力 $ dp $ 的话会 $ TLE $ ,所以我们考虑用单调队列优化. 原题中说她只移动到区间 $ [i+L,i+R] $ 中的任意一格,所以我们单调队列在转移的时候 $ push $ 的应该是 $ dp[i-L] $ ,而不是 $ dp[i] $ ,对于每一段区间,我们用起点(队头)来更新答案就好了. 最后一步,因为区间的限制,我们只用在 $ [n-R+1,n] $ 中找一个最大…
https://www.luogu.org/problem/show?pid=1725 题目描述 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精.某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河岸去追青蛙.小河可以看作一列格子依次编号为0到N,琪露诺只能从编号小的格子移动到编号大的格子.而且琪露诺按照一种特殊的方式进行移动,当她在格子i时,她只会移动到i+L到i+R中的一格.你问为什么她这么移动,这还不简单,因…
题目链接 琪露诺 解题思路 单调队列优化的\(dp\). 状态转移方程:\(f[i]=max{f[i-l],f[i-l+1],...,f[i-r-1],f[i-r]}+a[i]\) 考虑单调队列优化. 因为刚学,不是很熟悉单调队列,特写一篇详细的解释. \(queue\) 数组存储一个队列,他的头部和尾部的下标分别用head和tail表示. \(f\) 数组是\(dp\)用到的数组. 首先读入每一个坐标处的价值\(a[i]\) 枚举\(i\),从\(l\)到\(n\),分别计算\(f[i]\),…
显然的DP题..... 对于位置i,它由i-r~i-l的位置转移过来,容易得到方程 dp[i]=dp[i]+max(dp[i−r],...,dp[i−l]). 第一种:n2的暴力,只能拿部分分. 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=2e5+5,inf=0x3f3f3f3f; 4 int n,l,r,a[N],dp[N],ans=-inf; 5 6 int main(){ 7 scanf("%d%…
题目描述 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河岸去追青蛙. 小河可以看作一列格子依次编号为0到N,琪露诺只能从编号小的格子移动到编号大的格子.而且琪露诺按照一种特殊的方式进行移动,当她在格子i时,她只移动到区间[i+l,i+r]中的任意一格.你问为什么她这么移动,这还不简单,因为她是笨蛋啊. 每一个格子都有一个冰冻指数A[i],编号为0的格子冰冻指数…
[题目描述:] 今天是小Z的生日,同学们为他带来了一块蛋糕.这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值. 小Z作为寿星,自然希望吃到的第一块蛋糕的幸运值总和最大,但小Z最多又只能吃M小块(M≤N)的蛋糕. 吃东西自然就不想思考了,于是小Z把这个任务扔给了学OI的你,请你帮他从这N小块中找出连续的k块蛋糕(k≤M),使得其上的幸运值最大. [输入格式:] 输入文件cake.in的第一行是两个整数N,M.分别代表共有N小块蛋糕,小Z最多只能吃M小块. 第二行用空格…
琪露诺 思路: 单调队列+dp: 然而劳资不会单调队列,所以,线段树水过; 来,上代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define maxn 200005 struct TreeNodeType { int l,r,dis,mid; }; ]; int n,lit,rit,ai[maxn]…
本文是笔者第二篇解题报告.从现在开始,会将练的一些题发到博客上并归类到"解题报告"标签中. 琪露诺是这样一道题 这道题可以用纯DP做,但是据说会超时.(为什么?看起来过河这题比它数据大多了)于是到Luogu题解上找到了单调队列优化. 首先讲一下纯DP思路 假设我们的⑨正在河中央,编号为i的格子上. 观察琪露诺的移动规律可得,琪露诺再往下走只能走到编号为i + l 到 i + r 之间的格子上. 于是想到,琪露诺之所以现在能在这里,一定是上一步从编号为 i - r 到 i - l 的格子…
题目大意:琪露诺的冰雪小屋,我做的第一道大模拟题. 题解:模拟... 卡点:无数小错误,要是没有写一点调一点,那大概是永远调不出来了... C++ Code: #include <cstdio> #include <cstring> #include <queue> #include <cstdlib> #define PutRe(x) {puts(x); return ;} inline int min(int a, int b) {return a &l…
知识点: 模拟 , 信仰 原题面 大 型 车 万 众 自 裁 现 场 分析题意: 操作: ICE_BARRAGE R C D S R:行 , C:列, D:方向 , S:强度 在(R,C) 向 D 射线上 发射弹幕, 将 距离 S 格内 的位置 冰冻度 \(+1\) 冰冻度 只是 地面的属性 , 冰砖 无冰冻度属性 冰冻度 操作前已经为 \(4\) 的方格 冰冻度 不改变 遇到冰砖 射线线停止延伸 距离 \(=\) 经过方格数量 , 经过格子数量 \(\ge S\) 时 直线停止延伸 输出: C…
二次联通门 : cogs 920. [東方S1] 琪露诺 /* cogs 920. [東方S1] 琪露诺 dp 方程为dp[i] = max (dp[i - L], dp[i - L + 1] .... dp[i - R - 1], dp[i - R]); 要用单调队列优化 记录路径是只需像最短路问题一样记录前驱 后递归打印即可 */ #include <cstring> #include <cstdio> void read (int &now) { register c…
[题目描述 Description] 作为上白泽慧音老师的出色弟子,数学奇才琪露诺在算术方面有很深的造诣.今天,codevs有幸请到了这位数学界的奇葩作为本场考试的第一题主考官. 琪露诺喜欢0-9之间的数字,她喜欢将十进制非负数字的每一位一一识别出来,再将它们用计算器加起来,也即数字的数位之和,例如,对于1234,琪露诺会用计算器算出1+2+3+4=10. 琪露诺不仅会使用计算器的加法,还会使用计算器的减法.乘法和求幂操作,她觉得一个数x对她来说是有趣的,当且仅当她将x的数位之和算出来后,进行求…
题目描述 Description 作为上白泽慧音老师的出色弟子,数学奇才琪露诺在算术方面有很深的造诣.今天,codevs有幸请到了这位数学界的奇葩作为本场考试的第一题主考官. 琪露诺喜欢0-9之间的数字,她喜欢将十进制非负数字的每一位一一识别出来,再将它们用计算器加起来,也即数字的数位之和,例如,对于1234,琪露诺会用计算器算出1+2+3+4=10. 琪露诺不仅会使用计算器的加法,还会使用计算器的减法.乘法和求幂操作,她觉得一个数x对她来说是有趣的,当且仅当她将x的数位之和算出来后,进行求k次…
题面 典型的单调队列优化\(\text{DP}\)题. 不难想到设\(dp_i\)表示以\(i\)结尾能得到的最大冰冻指数. 这样设的转移方程也很简单:\(dp_i=\max\left\{ dp_j+a_i \right\} (i − r ≤ j ≤ i − l)\). 然而这样做的时间复杂度是\(\Theta(n^2)\)的,只有\(60\)分. 考虑如何优化. 我们可以利用单调队列这一个数据结构来维护\(dp_j\)的最大值. 此时的决策点就是队首点. 这就是单调队列优化\(\text{DP…
最近没有更新博客,全是因为英语,英语太难了QWQ 洛谷春令营的作业我也不会(我是弱鸡),随机跳了2个题,难度不高,还是讲讲吧,学学新算法也好(可以拿来水博客) 第一题就是这个小明的游戏 小明最近喜欢玩一个游戏.给定一个 n×m的棋盘,上面有两种格子#和@.游戏的规则很简单:给定一个起始位置和一个目标位置,小明每一步能向上,下,左,右四个方向移动一格.如果移动到同一类型的格子,则费用是0,否则费用是1.请编程计算从起始位置移动到目标位置的最小花费. 输入格式 输入文件有多组数据. 输入第一行包含两…
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1096 有\(n\)个工厂,给出第\(i\)个工厂的到1号工厂的距离\(x[i]\),货物数量\(p[i]\),建设仓库所需花费\(c[i]\). 现在要把所有货物都装入仓库,第\(i\)号工厂的货物可以选择在\(i\)建仓库并存入,或者移动到\(k\)号仓库\((i<k<=n)\).移动的花费为数量与距离的乘积. 分析 我们来想一想dp方程. 用\(dp[i]\)表示前\(i\)个工厂,且…
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1010 给出\(n\)和\(l\).有\(n\)个玩具,第\(i\)个玩具的长度是\(c[i]\),要求将玩具分成若干段,从\(i\)到\(j\)分为一段的长度为\(x=j-i+\sum_{k=i}^jc[k]\),费用为\((x-l)^2\).求最小费用. 分析 用\(dp[i]\)表示前\(i\)个玩具所需的最小费用,则有$$dp[i]=min\{dp[j]+(sum[i]-sum[j]+…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ172.html 题解 首先,这个问题显然是个背包问题. 然后,可以证明:一个字符串的 border 长度可以划分成 $O(log |S|)$ 个等差数列. (以下图片摘自  金策 - <字符串算法选讲>) 由于长度 n 可以随便取,所以我们可以在对n取模的意义下做背包,设 dis[i] 为 占用背包容量%n = i 时至少要占用多少背包容量,那么直接建 $n^2$ 条边跑一下 dijkstra 就可以…
原文链接https://www.cnblogs.com/zhouzhendong/p/HDU5470.html 题目传送门 - HDU5470 题意 你需要写一个只包含小写字母的字符串 $s$ . 你有两种操作: 1. 在当前写好的字符串的末尾加上一个字符 $c$ ,代价是 $cost_c$ ,所有的 $cost_c$ 都会给出. 2. 在已经写好的字符串中,选择一段子串 $a$ ,复制,并粘贴一次.代价是 $A\times |a|+B\times 2$ .其中 $A$ 和 $B$ 会给出. 问…
显然可以dp.显然可以单调队列优化一下. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int read() { ,f=;char c=getchar(); ;c=getchar();} )+(x<<)+(c^),…
对作文库中的串建出广义SAM,然后显然可以二分答案,二分之后考虑暴力dp,设f[i]为前i位最长匹配长度,显然有f[i]=max(f[i-1],f[j]+i-j) (i-j>=l&&j+1~i能在作文库中匹配).在SAM上跑并记录匹配长度,单调队列优化dp即可. #include<bits/stdc++.h> using namespace std; #define ll long long #define N 2200010 char getc(){char c=get…
\(单调队列\) 或 \(堆\) 优化 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a = (b); a <= (c); ++ a) #define nR(a,b,c) for(register int a = (b); a &g…
单调队列 #include <iostream> #include <cstdio> using namespace std; int n, l, r, dp[400005], a[200005], q[200005], hea, tai; //dp[i] = max{dp[k]} + w[i] | i-r<=k<=i-l int main(){ cin>>n>>l>>r; for(int i=0; i<=n; i++) sca…
跟去年(2017)PJ第四题几乎是一样的?/吐血 DP方程可以很简单的推出来,f[i]=max{f[k]}+a[i] 然而这样做是O(n^2)的 看一下数据,200000的话要不nlogn 要不n 由于题解里面单调队列和优先队列都有人用了,那就来一发线段树吧 (或者实情是:单调队列不会打?) 只要维护i-r~i-l中f[i]的区间最大值即可(单点修改-区间查询) 40行AC #include<cstdio> #include<iostream> #include<cstrin…