码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • P1182 数列分段 Section II


    题目描述

    对于给定的一个长度为N的正整数数列A1∼N​,现要将其分成 M(M≤N)段,并要求每段连续,且每段和的最大值最小。

    关于最大值最小:

    例如一数列4 2 4 5 1 要分成 33 段。

    将其如下分段:

    [4 2][4 5][1]

    第一段和为 6,第 2 段和为 9,第 3 段和为 1,和最大值为 9。

    将其如下分段:

    [4][2 4][5 1]

    第一段和为 4,第 2 段和为 6,第 3 段和为 6,和最大值为 6。

    并且无论如何分段,最大值不会小于 6。

    所以可以得到要将数列4 2 4 5 1 要分成 3 段,每段和的最大值最小为 6。

    输入格式

    第 1 行包含两个正整数 N,M。

    第 2 行包含 N 个空格隔开的非负整数 Ai​,含义如题目所述。

    输出格式

    一个正整数,即每段和最大值最小为多少。

    输入输出样例

    输入 #1复制

    5 3
    4 2 4 5 1

    输出 #1复制

    6

    说明/提示

    对于 20\%20% 的数据,N\leq 10N≤10。

    对于 40\%40% 的数据,N\leq 1000N≤1000。

    对于 100\%100% 的数据,1\leq N\leq 10^51≤N≤105,M\leq NM≤N,A_i < 10^8Ai​<108, 答案不超过 10^9109。

    二份答案模版,最大值最小,判断mid通过累加判断次数,最终求解 

    1. #include <iostream>
    2. using namespace std;
    3. constexpr int N=1e5+10;
    4. long long n,m,s[N],k1=0,k2;
    5. bool check(long long x){
    6. long long ans=0,now=0;
    7. for(int i=1;i<=n;i++){
    8. if(now+s[i]>x){
    9. ans++;
    10. now=s[i];
    11. }
    12. else
    13. now+=s[i];
    14. }
    15. return ans<m;
    16. }
    17. long long ef(long long l,long long r){
    18. while(l<r){
    19. long long mid=(l+r)>>1;
    20. if(check(mid)){
    21. r=mid;
    22. }
    23. else{
    24. l=mid+1;
    25. }
    26. }
    27. return l;
    28. }
    29. int main(){
    30. scanf("%lld%lld",&n,&m);
    31. for(int i=1;i<=n;i++) {
    32. scanf("%lld", &s[i]);
    33. k1 = max(k1, s[i]);
    34. k2 += s[i];
    35. }
    36. printf("%lld",ef(k1,k2));
    37. }

     

  • 相关阅读:
    【Python3 高级篇】5. subprocess 子进程管理,取代 os.popen()/os.system()
    StringBuilder的底层实现原理
    unity局部坐标和世界坐标角度介绍
    软件安装(Tomcate,Mysql,lrzsz)
    【基础算法】多项式三大运算 & C++实现
    【微信开发第一章】SpringBoot实现微信公众号创建菜单,同步菜单功能
    用.bat文件做Airtest脚本的多设备批量运行
    二维矩阵子集的最大值
    【电子器件笔记6】三极管(BJT)参数和选型
    Vuex 3使用总结
  • 原文地址:https://blog.csdn.net/q619718/article/details/127776264
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号