poj 3017 题解

MindIE与vLLM-Ascend性能对决:Qwen3在昇腾910B上的推理效率实测 本文深度对比了昇腾910B平台上两大推理框架MindIE与vLLM-Ascend的性能表现。通过实测Qwen3系列模型,详细分析了二者在单卡、多卡场景下的推理效率、扩展性及生产环境适用性,为AI算力基础设施选型提供关键参考。 阅读详情

题意简述

给定一个序列,和一个常数mmm,要你把这个序列分成几个连续的部分,每一个部分的和都不能超过mmm,然后让你最小化每一段的最小值的和。

数据

输入
8 17
2 2 2 8 1 8 2 1
输出
12

解释

222∣818∣212 2 2 | 8 1 8 | 2 1222∣818∣21
这样划分使得最小值的和最小=2+8+2=12=2+8+2=12=2+8+2=12

思路

上来就dpdpdp。
dp[i]dp[i]dp[i]表示考虑到iii位置的最优答案,那么dp[i]=dp[j]+max(a[j+1],a[j+2]⋯a[i])dp[i]=dp[j]+max(a[j+1],a[j+2]\cdots a[i])dp[i]=dp[j]+max(a[j+1],a[j+2]⋯a[i]),约束条件1&lt;=j&lt;i1&lt;=j&lt;i1<=j<i且sum(j,i)&lt;=msum(j,i)&lt;=msum(j,i)<=m。
看起来十分完美,交上去也十分完美的TLETLETLE了。(当然,一个正常人是不会交这种代码上去的。。。)
如果能想个办法优化这个转移,使得它变成O(n)O(n)O(n)的就好了。(美好的fantasiesfantasiesfantasies总是要有的,万一足够deepdeepdeep,足够darkdarkdark,能使得这个fantasiesfantasiesfantasies成立呢?)
我们会发现,随着iii的增长,包含iii的那一块的左端点(就是那个最优的jjj)也是单调往右的,不会往左。有了这个神奇的性质,我们就珂以用单调队列来优化这个DPDPDP了。按照套路,我们由于要求最大值,便维护好一个递减的单调队列即可。又因为我们的左端点是单调增的,所以只要在增的时候,把队列中在左端点还左边的点都删掉,然后我们枚举队列中的kkk,我们知道Q[k]Q[k]Q[k]是kkk往后最大的下标,所以我们的转移方程中就不用每次都暴力求一遍最大,只要取a[Q[k]]a[Q[k]]a[Q[k]]即可。然后记得用preprepre维护左端点,然后每次加。

代码:

#include<cstdio>
#include<algorithm>
#define N 100100
#define int long long
using namespace std;

int n,m,a[N];
int dp[N];

void Input()
{
    scanf("%lld%lld",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&a[i]);
    }
}

int Q[N],head,tail;
void Solve()
{
    for(int i=1;i<=n;i++)
    {
        if (a[i]>m)
        //这样的元素,无论分到那个组,或者是单独一组,都没有办法满足条件
        {
            puts("-1");
            return;
        }
    }

    head=tail=1;
    int pre=1,sum=0;
    for(int i=1;i<=n;i++)
    {
        while(head<tail and a[Q[tail-1]]<=a[i]) tail--;
        Q[tail++]=i;//a[i]入队列

        sum+=a[i];
        while(sum>m)
        {
            sum-=a[pre],++pre;//左端点右移
        }
        while(head<tail and Q[head]<pre) head++;
        //去掉不满足条件的左端点

        dp[i]=dp[pre-1]+a[Q[head]];
        for(int k=head+1;k<tail;k++)
        {
            dp[i]=min(dp[i],dp[Q[k-1]]+a[Q[k]]);
        }
        //转移
    }
    printf("%lld\n",dp[n]);
}

signed main()
{
    Input();
    Solve();
    return 0;
}
实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码) 导读 本文主要介绍使用OpenCV对扫描文本矫正的应用实例及详细实现步骤。 背景介绍 在使用打印机或扫描仪扫描文档时,由于摆放位置差异难免造成扫描文档的倾斜。本文将使用OpenCV将倾斜的文档矫正水平并去除黑边。 实现步骤 本文只针对包含大部分文字的文档做倾斜矫正,思路来源是大部分文字倾斜后同一行的也在同一条直线,通过拟合直线计算文本倾斜角度,然后旋转来实现文本倾斜矫正。 详细步骤: ①加载倾斜图像 ②灰度转换+腐蚀+膨胀 ③Canny边缘检测 + 霍夫线变换检测直线 ... 阅读详情

相关推荐

开关变换器分析:大信号模型与小信号模型

是电力电子系统建模中的两类基本方法,分别用于描述系统在不同工作条件下的动态行为。它们的核心区别在于是否对变量进行线性化近似,以及适用的分析场景。

创新改变世界! 1909

poj 3017(单调队列)

想了半天终于是看的题解,网上的题解好像都是出自一人之手,写的都一毛一样,令人窒息。建了一个递减的队列,具体很难讲的清,又不想复制别人的讲解,就这样吧。#include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;algorithm&gt; #include&lt;cstring&gt; #include&lt;cmath&gt; #incl...

blaze_jack 399

别再到处找离线包了!Visual Studio 2022 企业版/社区版离线安装保姆级教程(含工作负载选择指南)

本文提供Visual Studio 2022企业版/社区版离线安装的详细教程,包括工作负载选择指南和批量安装优化策略。针对网络隔离或带宽受限环境,介绍如何制作离线安装包、选择合适的工作负载组合,并分享高级技巧如增量更新和自动化部署,帮助团队高效统一开发环境配置。

weixin_28745821的博客 731

蓝书(算法竞赛进阶指南)刷题记录——POJ3017 Cut the Sequence(DP+单调性优化+队列+set)

题目:POJ3017. 题目大意:给定一个长度为nnn的正整数序列aaa,要求把这个序列分成若干段使得每一段的和不超过一个给定的常数mmm,使得每一段的最大值之和最小,输出最小值. 1≤n≤1051\leq n\leq 10^51≤n≤105. 首先这道题显然是个DP,考虑设f[i]f[i]f[i]表示前iii个数划分成若干段的最小代价,容易列出方程: f[i]=min⁡j∈[1,i],∑t=ji...

hzk_cpp的博客 259

基于IMU的纯惯性导航轨迹绘制实践与优化

本文深入探讨了基于IMU的纯惯性导航轨迹绘制实践。通过修改开源组合导航算法KF-GINS,屏蔽GPS更新并简化地球参数,实现了仅依赖IMU数据的轨迹解算。文章详细介绍了代码改造、轨迹可视化方法,并分析了误差累积的根本原因,为深入理解惯性导航原理与传感器融合的必要性提供了宝贵的实践经验。

ff678的博客 395

Oracle-如何修复undo坏快

undo出现坏快,导致数据库宕机,无法启动

qqqyyy0422的博客 570

[poj3017]Cut the Sequence——单调队列优化DP

题目大意: 给定一个长度为n的序列和整数m,求一个划分使得每一段的和不大于m且每一段的最大值的和最小。 思路: 设dp[i]为前i个的最小和,方程显而易见: dp[i]=min(dp[j]+max(a[j+1]...a[i]))dp[i]=min(dp[j]+max(a[j+1]...a[i]))dp[i]=min(dp[j]+\max(a[j+1]...a[i])) 朴素的时间复杂...

ylsoi的博客 301

Unity多渠道APK打包:同一工程稳定输出不冲突安装包

Android应用多渠道分发是移动开发的基础场景,其核心在于解决包名唯一性、渠道可识别性与构建可重复性三大问题。原理上,Unity安卓打包本质是三阶段流程:生成Android工程、Gradle编译、APK签名,而包名冲突根源在生成阶段对PlayerSettings的强依赖。技术价值体现在规避人工配置失误、支撑CI/CD自动化、满足华为/小米等商店合规要求。典型应用场景包括应用宝、TapTap、B站等渠道独立包管理,以及AB测试、灰度发布等运营需求。本文聚焦Unity原生方案,通过BuildPlayerOpt

weixin_33736048的博客 794

POJ3017【Cut the Sequence】

Cut the Sequence 题目 Cut the Sequence 解析 单调队列优化DP好题 万题先拿部分分,我们先考虑裸DP,得到动态转移方程: dp[i]=min(dp[j]+max(a[k])(j<k<=i))(1<=j<=i) 显然这个O(N2)的DP必T 考虑单调队列优化最大值,AC 1,前缀和优化,O(1)区间求和 2,开longlong 3,有值>m时输出-1 其实听说单调队列优化可以被卡成O(n2),但是A了就行 code: #include<c

zhanglili1597895的博客 303

【Bug已解决】Request timed out / API Timeout — Claude Code 请求超时解决方案

方案适用场景推荐指数难度方案一:增加超时大任务处理⭐⭐⭐⭐⭐低方案二:切换 SonnetOpus 太慢⭐⭐⭐⭐⭐低方案三:缩小范围大代码库⭐⭐⭐⭐⭐低方案四:优化网络网络延迟高⭐⭐⭐⭐中方案五:减少 MCPMCP 超时⭐⭐⭐中方案六:流式响应长生成任务⭐⭐⭐低根本原因:请求超时最常见原因是请求体过大(35%)和 Opus 模型推理慢(25%),默认 60 秒超时阈值对大型任务不够最佳实践。

一键难忘的博客 5162

干货|C#上位机与西门子PLC的Profinet协议通信开发(工控机版)

文章摘要: Profinet是西门子主导的工业以太网协议,支持实时通信(RT/IRT),广泛应用于PLC与工控机通信。本文聚焦C#上位机通过S7协议(集成于Profinet接口)高效访问西门子PLC(S7-1200/1500等),提供完整开发方案: 协议基础:解析Profinet三层架构(TCP/IP层、实时层、应用层),对比S7协议优势(开发便捷、跨平台); 开发实践:基于S7NetPlus/Snap7库实现数据读写,涵盖DB块、I/O点等地址规则; 环境配置:工控机(Windows/Linux/统信UO

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1213

POJ 3017 Cut the Sequence (单调队列优化DP)

POJ 3017 Cut the Sequence (单调队列优化DP) ACM 题目地址:  POJ 3017 Cut the Sequence 题意:  将一个由N个数组成的序列划分成若干段,要求每段数字的和不超过M,求【每段的最大值】的和 的最小的划分方法,输出这个最小的和。 分析:  方程是:dp[i] = min(dp[j]+maxsum[j+1][i]) 

水果君の日常 3240

基于QT+Halcon实现线序识别

一、线序识别算法步骤。 1.按照检测区域m_pItem1的外接矩形(rtBount)的大小, 截取感兴趣区域图像hRoi。 2.把截取出来的感兴趣区域图像hRoi, 分离出R、G、B三个通道hRed、hGreen、hBlue。 3.把hRed、hGreen、hBlue三个通道转换成cielab颜色空间, 得到hChannelL、hChannelA、hChannelB三个颜色图。 4.设m_pItem1的宽为iItemW, 高为iItemH. 分别申请大小为iItemW的pSumL、pSumA、pSumB内

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 1748

【单调性dp】poj 3017 Cut the Sequence

题目:http://poj.org/problem?id=3017 参考:http://www.cnblogs.com/MashiroSky/p/5956429.html //看了好久,智商堪忧 //#pragma comment(linker, "/STACK:102400000,102400000") #include #include #include #include #

学无纸巾 351

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

POJ 3017 DP + 单调队列

题意 传送门 POJ 3017 题解 #include <algorithm> #include <cmath> #include <cstdio> #include <cstring> #include <limits> using namespace std; #define min(a, b) ((a) < (b) ? (a) : (b)) #define max(a, b) ((a) > (b) ? (a) : (b)) ty

neweryyy的博客 310

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

POJ - 3017 Cut the Sequence (单调栈优化dp)

Cut the Sequence POJ - 3017 题目大意:给出一个序列,要我们分成若干段,使得每段的最大值做和最小。同时还给了一个限制,每段的和不能超过m。 解题思路:这个题目写起来还真的是细节满满。。。。 首先可以得到n^2的dp。 设dp[i]为前i个满足要求的最小值。 那么对于i. dp[i]=min(dp[j],max(j+1,i)) 其中(0<=j&amp...

1999 331

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

POJ 3087 题解

没什么用的目录题目地址AC代码题解和题目思路 题目地址 这是地址 AC代码 #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int t; cin>>t; for (int i = 0; ...

a47451516的博客 241

刷题总结——Cut the Sequence(POJ 3017 dp+单调队列+set)

题目: Description Given an integer sequence {an} of lengthN, you are to cut the sequence into several parts every one of which is a consecutive subsequence of the original sequence. Every pa...

banzhangzhi8819的博客 183

POJ--3017--Cut the Sequence--DP优化

题目大意:求一个数字序列的划分,每一个划分块的和不大于M,求出所有划分块最大值的最小值。 DP方程:dp[i] = min{dp[j]+max(a[j+1],a[i])} 用一个单调队列存储所有可行的决策,这个单调队列里面存储条件是队列范围的所有元素和不大于M,所以队列元素的个数就是每个点的决策个数。 更详细的题解可以看一下别人的blog #include #include #includ

WoniuGe 893

【poj3017】 Cut the Sequence

http://poj.org/problem?id=3017(题目链接) 题意   给出一个数列要求将它分割成许多块,每块的数的和不超过m,要求每块中最大的数之和最小。 Solution   这道题真的很不错啊。   可以很快写出dp方程:${f[i]=min(f[j]+max(a[j+1],a[j+2]···a[i]))}$。数据范围太大,我们必须要想办法优化这个方程。${O(n)}...

weixin_30267697的博客 134

POJ3017-单调队列

/* 交的时候没什么信心会AC,结果AC了,挺高兴的。 如果之前能确定算法没问题,应该自信点~不熟练还是~ 题解: 先得dp方程:f[i]=f[j]+max(x[j+1],x[j+2],...,x[i]),其中j<i,x[j+1]+x[j+2]+...+x[i]<=m; 可以用n^2级的dp算法手工模拟一下,发现其中最优策略的规律,考虑m的影响,最值的区间范围等等,然后单调队列搞起~ 网路上的代码

Wo xi Meiz 1927

【POJ3017】Cut the Sequence

题目大意:给定一个长度为 N 的序列,将序列划分成若干段,保证每段之和不超过 M,问所有段的最大值之和最小是多少。 题解:设 \(f[i]\) 表示前 i 个数满足上述条件的最优解,显然有状态转移方程\[f[i]=min\{f[j]+max_{j+1\le k \le i}\{a[k]\}\}\],发现若能够在 \(O(1)\) 的时间内求得静态区间最小的 a 值,则时间复杂度为 \(O...

K1385170的博客 233

poj3017Cut the Sequence

题目大意: 都是英文大家应该看得懂吧。 给定一个数列{an},任意将连续的ai分块,使所有块的和都不超过M,最小化各块的最大值的和。 题解: dp[i]为前i个数取得的最小和,那么我们可以有递推公式:dp[i]=min(dp[i],dp[j]+max(a[j+1],a[j+2],...,a[i])) ,其中j 但复杂度n^2 所以单调队列一下。 可以发现,dp[i]是单调不下

cx_lzx蒟蒻的博客 357

poj 3017 单调队列优化DP

这是看了论文之后来做的。。。。 但是论文上有个地方没

马德里小铁匠的铁匠铺 645

Cut the Sequence 【单调队列(栈)+堆优化DP】

题目链接 POJ - 3017 超级好的一道题目,从早上先写一个诡异的线段树(当然是错的),逐步推到了单调栈和单调队列,历时很久很久——题记。 将我的解题思路慢慢的展开: 首先,为什么会想到线段树呢,因为这很容易化简成为一个区间dp的形式,就是 这个dp还是比较容易想到的,然后呢,看到这里有一个区间最小值,然后再来就是一个单点更新,以及一个不断放进去的很容易想到用线段树...

既然弱小,就只顾变强就是了 485
上一篇: poj 1141 题解
下一篇: 洛谷 2698 题解
LightningUZ
博客等级 码龄9年 33粉丝 254原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值