博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二分答案—洛谷P1182 数列分段`Section II`
阅读量:5880 次
发布时间:2019-06-19

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

简单的二分答案,但要注意边界的选取以及如何二分答案

#include
using namespace std;const int maxn=1e6+7;int n,m;int a[maxn];int sum[maxn];bool check(int x)//判断当前的答案{ int cnt=0; int tot=0; for(int i=1;i<=n;i++) { if(tot+a[i]<=x) { tot+=a[i]; } else { tot=a[i]; cnt++; } } return cnt>=m; }int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); l=max(l,a[i]);//左边界是数列中最大的数 r+=a[i];//右边界是数列中所有数字的和 } while(l<=r)//二分模板(因题而异,不过与zbh上课讲的不太一样) { int mid=(l+r)>>1; if(check(mid)) l=mid+1; else r=mid-1; } printf("%d",l);//答案是最大的最小,所以在左边界 return 0;}

 

转载于:https://www.cnblogs.com/LJB666/p/10988052.html

你可能感兴趣的文章
加快ALTER TABLE 操作速度
查看>>
学习笔记之软考数据库系统工程师教程(第一版)
查看>>
PHP 程序员的技术成长规划
查看>>
memcached 分布式聚类算法
查看>>
jquery css3问卷答题卡翻页动画效果
查看>>
$digest already in progress 解决办法——续
查看>>
虚拟机 centos设置代理上网
查看>>
Struts2中Date日期转换的问题
查看>>
mysql 数据类型
查看>>
Ubuntu 设置当前用户sudo免密码
查看>>
设置tomcat远程debug
查看>>
android 电池(一):锂电池基本原理篇【转】
查看>>
Total Command 常用快捷键
查看>>
ionic 调用手机的打电话功能
查看>>
怎么使用阿里云直播服务应用到现在主流直播平台中
查看>>
1000 加密算法
查看>>
exif_imagetype() 函数在linux下的php中不存在
查看>>
Ruby的case语句
查看>>
Linux的链接文件-ln命令
查看>>
maven的tomcat插件如何进行debug调试
查看>>