bzoj4639 博士的选取器

题意

给出一个长度为n的正整数序列,要求把它划分成若干个连续的区间,使得每个区间的数字之和都不超过给定的lim.最后的代价等于每个区间的最大值之和.求最小代价.n<=300000

分析

定义f[i]表示前i个数划分成若干个区间的最小代价,一眼是个1D1D动态规划,猜测有决策单调性,打表发现并没有.然后也看不出什么很妙的性质.
感觉分治也许能做,推一推发现确实可以.定义solve(l,r)处理f[l...mid]到f[mid+1...r]的转移,按照最大值在左边/右边分两种情况处理,都可以线性解决.递归时要先solve(l,mid),然后处理[l,mid]到[mid+1,r]的转移,再solve(mid+1,r).细节见代码,不是很难写.

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=300006;
typedef long long ll;
int n;ll lim;
ll f[maxn];
ll pre[maxn],a[maxn];
ll Min[maxn],Max[maxn],mark[maxn];
void gmin(ll &a,ll b){if(a>b)a=b;
}
void solve(int l,int r){if(l==r)return;int mid=(l+r)>>1;solve(l,mid);Min[mid]=f[mid];Max[mid]=a[mid];for(int i=mid-1;i>=l;--i)Min[i]=min(Min[i+1],f[i]),Max[i]=max(Max[i+1],a[i]);Max[mid+1]=a[mid+1];for(int i=mid+2;i<=r;++i)Max[i]=max(Max[i-1],a[i]);int L=l,pt=mid+1;for(int i=mid+1;i<=r;++i){while(pre[i]-pre[L]>lim)L++;while((pt-1)>l&&Max[pt-1]<=Max[i])--pt;if(L>mid)break;gmin(f[i],Max[i]+Min[max(pt-1,L)]);}for(int i=mid+1;i<=r;++i)mark[i]=(1ll<<60);int R=r;pt=mid;for(int i=mid;i>l;--i){while(pre[R]-pre[i-1]>lim)R--;if(R<=mid)break;while(pt+1<=r&&Max[pt+1]<=Max[i])++pt;if(pt>mid){gmin(mark[min(pt,R)],f[i-1]+Max[i]);}}for(int i=r;i>=mid+1;--i){gmin(f[i],mark[i]);gmin(mark[i-1],mark[i]);}solve(mid+1,r);
}
int main(){scanf("%d%lld",&n,&lim);for(int i=1;i<=n;++i){scanf("%lld",&a[i]);pre[i]=pre[i-1]+a[i];}for(int i=1;i<=n;++i){if(pre[i]<=lim)f[i]=max(a[i],f[i-1]);else f[i]=1ll<<60;}solve(1,n);printf("%lld\n",f[n]);return 0;
}

转载于:https://www.cnblogs.com/liu-runda/p/6920650.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468495.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

星期四随笔

周二的晚上&#xff0c;发了一篇文章&#xff0c;题目是《要用什么态度去面对生活》&#xff0c;发文是凌晨1点&#xff0c;早上7点起来&#xff0c;用手机刷了一下&#xff0c;很多回复&#xff0c;其中几个回复有点偏激&#xff0c;感觉被刺痛了&#xff0c;毕竟是睡着的&…

根据大小分割大文本_基于深度学习的图像分割在高德地图的实践

一、前言图像分割(Image Segmentation)是计算机视觉领域中的一项重要基础技术&#xff0c;是图像理解中的重要一环。图像分割是将数字图像细分为多个图像子区域的过程&#xff0c;通过简化或改变图像的表示形式&#xff0c;让图像能够更加容易被理解。更简单地说&#xff0c;图…

别人不让你发传单怎么办?

人生在世难免遇到几个傻逼&#xff0c;我今天没有上班&#xff0c;去外面兼职发了一天的传单&#xff0c;也许你们没有过发传单的经历&#xff0c;当然了&#xff0c;我也不是想为了增加人生阅历去发传单&#xff0c;单纯就是今天没什么事情&#xff0c;刚刚好公司停电&#xf…

模块化加载_谈谈双亲委派模型的第四次破坏-模块化

前言JDK9引入了Java模块化系统(Java Platform Moudle System)来实现可配置的封装隔离机制&#xff0c;同时JVM对类加载的架构也做出了调整&#xff0c;也就是双亲委派模型的第四次破坏。前三次破坏分别是&#xff1a;双亲委派模型推出之前&#xff0c;SPI机制&#xff0c;以及O…

第4章 原子操作

有一件事情&#xff0c;你不得不承认&#xff0c;C语言相对汇编来说是高级语言&#xff0c;为什么&#xff0c;因为高级语言会形成封装&#xff0c;比如&#xff0c;我需要把一个变量A&#xff0c;对于CPU来说&#xff0c;先从内存里把这个变量读进运算寄存器&#xff0c;然后运…

龙芯下中标系统C语言查找设备号_龙芯:主控进驻国产激光打印机并适配麒麟OS...

导读&#xff1a;龙芯中科宣布&#xff0c;龙芯1C0300B作为主控芯片&#xff0c;已经批量用于天津光电出品的多款激光打印机中&#xff0c;在打印扫描、通信控制、协议解析方面发挥着重要的作用。图&#xff1a;龙芯1C0300B 主控芯片龙芯1C系列是基于GS232处理器核的高性价比单…

随笔日记

最近加班比较多&#xff0c;昨晚上又坐了最后一班地铁回家&#xff0c;回到家已经是一点了&#xff0c;在路上遇到一个美团外卖的小哥&#xff0c;小哥跟我说&#xff0c;嗨&#xff0c;帅哥&#xff0c;我想借你的头盔用一下&#xff0c;你们可以想象一下&#xff0c;在晚上12…

C#的命名空间

对于大型组织而言&#xff0c;如果涉及到产品线&#xff0c;项目&#xff0c;公共平台很多&#xff0c;如何通过命名空间将所有代码有效的组织起来。就一个目的&#xff0c;用的时候能够很容易的找到。 对于命名空间在大型项目中&#xff0c;必须组织好&#xff0c;一般命名空间…

今日头条关键词排名怎么搜索_公众号搜索关键词排名、公众号怎么排名靠前

真正的互联网老鸟其实都知道&#xff0c;不管在线上推广什么产品都好&#xff0c;其实都没有所谓的难度&#xff0c;获取流量方式其实就是简单的一批&#xff0c;哪里有怎么玄乎&#xff0c;不管以后遇到什么问题&#xff0c;除了首先需要知道的核心关键词&#xff0c;无非就是…

​CPU单挑到群架发展史

CPU 又称中央处理器&#xff0c;搞软件开发的兄弟已经耳熟能详了&#xff0c;CPU 的发展史最基本的矛盾就是软件性能需求的快速提升与 CPU 技术工艺性能提升发展相对缓慢之间的矛盾。摩尔定律也是基于此背景&#xff0c;将硬件性能的有限提升给软件开发者一个预期&#xff0c;告…

JDK、JRE、JVM三者间的关系

JDK&#xff08;Java Development Kit&#xff09;是针对Java开发员的产品&#xff0c;是整个Java的核心&#xff0c;包括了Java运行环境JRE、Java工具和Java基础类库。Java Runtime Environment&#xff08;JRE&#xff09;是运行JAVA程序所必须的环境的集合&#xff0c;包含J…

典型方法_裴礼文老师编数学分析中的典型问题与方法练习参考答案的说明

裴礼文老师编《数学分析中的典型问题与方法》练习参考答案该书共计7章36节1036页&#xff0c;各章由知识点总结、例题和练习组成&#xff0c;知识点基本按照传统《数学分析》教材先后顺序跟进。例题和练习出自《数学分析》经典习题和近年《数学分析》考研试题&#xff0c;极具代…

第4章 原子操作 第二节

-------------------------------------------------------------上一章节说的原子操作&#xff0c;有同学在下面留言说&#xff0c;原子操作不是万能的吧&#xff1f;确实是&#xff0c;原子操作不是万能的&#xff0c;体系结构在完成原子操作部分也是花费了很大的心思&#x…

表格字体缩小 php_如何快速找出两个Excel表格不同的地方?

上一篇文章介绍了如何快速找出两个word文档不同的地方&#xff0c;这篇文章来说说如何快速找出两个Excel表格不同的地方&#xff0c;这里说的两个Excel表格&#xff0c;可以是同一个工作簿的不同sheet&#xff0c;也可以是两个不同的Excel文件&#xff0c;如下图&#xff1a;黄…

Makefile文件(四)_书写命令

变量说明&#xff1a; $ ---> 目标文件 $^ ---> 所有的依赖文件 $< ---> 第一个依赖文件 一、显示命令 echo 正在编译xx模块...... 当make执行时&#xff0c;会输出“正在编译xx模块......”&#xff0c;但不会输出命令 echo 正…

周一地铁遐想

连续两周的早上8点出门到晚上12点到家&#xff0c;今天中午睡不着&#xff0c;下午调试代码的时候感觉脑子眼睛有点迷糊&#xff0c;旁晚吃饭的时候&#xff0c;有几个同学还在微信私聊我问题&#xff0c;因为都是加了我的知识星球的同学&#xff0c;咨询的是个人的规划还有以后…

rds基于什么开发_java rds

关于java rds的搜索结果问题新手求问RDS使用相关问题刚接触RDS&#xff0c;根据阿里教程 https://help.aliyun.com/document_detail/rds/SDK-manual/JAVA.html&#xff0c;我想用java访问RDS&#xff0c;代码如下&#xff1a;结果显示如下&#xff1a;谁知道思路是什么&#xf…

再说鸿蒙

上一篇文章已经被骂狗血了&#xff0c;我一直想找个时间好好澄清一些东西&#xff0c;正好今天晚上睡不着&#xff0c;现在是凌晨4点&#xff0c;我觉得应该再发下东西&#xff0c;当然了&#xff0c;还是以我特有的尿性&#xff0c;没有摆事实讲道理&#xff0c;就是我以为。1…

shell--基本语法

继续运算符模块。 part1 算术运算符 - * / % part2 关系操作 与(&#xff08;&#xff09;)连用 < > < > ! && || 注意&#xff1a;一个等号是赋值操作&#xff0c;两个等号是判断 test命令相关&#xff0c;[]可以达到一样的效果 part3 赋值运算符 * /…

学生信息系统求助_一个学生信息录入和查询的系统

我们asp。net 作业大神帮帮忙。一个学生信息录入和查询的系统。主要分成以下几个页面。我在描述的时候&#xff0c;请大家对照课本找到相关章节并做上记号&#xff0c;方便后面的制作。首先需要大家制作一个数据库。这个数据库当中包含两个数据表。一个数据表是存放用户信息——…