博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P1714 切蛋糕(dp+RMQ)
阅读量:6567 次
发布时间:2019-06-24

本文共 1133 字,大约阅读时间需要 3 分钟。

首先,很简单的dp方程:
\[f_i=max(s_i-s_j)(j\in [i-m,i])\]然后发现\(s_i\)\(j\)无关,可以提出来:
\[f_i=s_i-min(s_j)(j\in [i-m,i])\]发现这个方程可以用数据结构优化,比如线段树,树状数组等等,我这里推荐用st表。
预处理:\(O(nlogn)\) 递推:\(O(n)\)
代码:

#include
#define ll long longusing namespace std;inline int read(){ int x=0;char ch=' ';int f=1; while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar(); if(ch=='-')f=-1,ch=getchar(); while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*f;}int n,m;int a[500001];int s[500001];int st[20][500001];inline int query(int l,int r){ int k=log(r-l+1)/log(2); return min(st[k][l],st[k][r-(1<
>1]+1; } n=read();m=read(); for(int i=1;i<=n;i++){ a[i]=read(); s[i]=s[i-1]+a[i]; st[0][i]=s[i]; } for(int k=1;k<=19;++k){ for(int i=1;i+(1<
<=n;++i){ st[k][i]=min(st[k-1][i],st[k-1][i+(1<<(k-1))]); } } int ans=-0x7fffffff; for(int i=1;i<=n;++i){ int l=i-m; if(l<0)l=0; int num=s[i]-query(l,i); ans=max(ans,num); } printf("%d",ans); return 0;}

转载于:https://www.cnblogs.com/stone41123/p/7595822.html

你可能感兴趣的文章
我的博客园的CSS和html设置
查看>>
android launchmode(四种启动模式)应用场景及实例
查看>>
工作中简单的kettle使用
查看>>
spark shuffle:分区原理及相关的疑问
查看>>
C#匿名委托
查看>>
Laravel5.5 使用第三方Vendor添加注册验证码
查看>>
06- Linux下sublime下载与使用
查看>>
前端文摘:Web 开发模式演变历史和趋势
查看>>
将图片序列转化为视频文件
查看>>
jQuery的文档操作***
查看>>
CODING Pages 服务全面升级,更快更稳更可靠!
查看>>
js 小数取整,js 小数向上取整,js小数向下取整
查看>>
从头到尾彻底理解KMP
查看>>
mysql 自定义函数与自定义存储过程的调用方法
查看>>
vue-cli3.0
查看>>
window.location.replace vs window.location.href
查看>>
CVPR 2018:阿里提出应用 LocalizedGAN 进行半监督训练
查看>>
美国科技巨头试图掀起一场悄无声息的应用革命
查看>>
「人物特写」工程院院士谭建荣:马云不是制造业的杀手,工业机器人也不是救命良药...
查看>>
被劫持的wordpress.com账户被用来感染站点
查看>>