8-10 Coping Books uva714
题意:把一个包含m个正整数的序列划分为k个 1<=k<=m<=500的非空连续子序列 使得每个正整数恰好属于一个序列 设第i个序列的各个数之和为 Si 你的任务是让所有的 Si的最大值尽量小 输出用‘/’划分好的序列
输出时 如果有多解 s1尽量小 如果s1相同 s2尽量小。。。。。
求最大值的最小值
可以采用ida*
但是ida*毕竟是枚举 效率远不如二分答案来的快
之前有一题最大值的最小值也是用二分答案来写很方便
最好在输入数据部分 统计L和R 这题R为给出序列的和 L为最大元素
切记 sum L R 用long long
这题难在输出部分
我的思路和LRJ的一样 反向做一个贪心 最后面的尽量取多 前面就会少
但是出现了 后面划分的太开了 导致剩余括号太多了的问题 可能前面几个子序列都为空了。
LRJ加了一条代码很简单的解决了这个问题
并且 能不递归就不递归方便!
#include<bits/stdc++.h>
using namespace std;
#define N 1001
int n,k;
int a[N];
int ok(int x)
{ int cnt=;
long long sum=;
for(int i=;i<=n;i++)
{
if(sum+a[i]<=x)
sum+=a[i];
else
{
cnt++;
sum=a[i];
if(cnt>k)return ;
}
}
if(sum!=)cnt++;
if(cnt<=k)return ;
return ;
} void show(long long x)
{
long long sum=;
int remain=k;
int last[N];
memset(last,,sizeof last);
for(int i=n;i>=;i--)
{
if(sum+a[i]>x || i<remain )
{
last[i]=;sum=a[i];remain--;
}
else sum+=a[i];
}
for(int i=;i<n;i++)
{
printf("%d ",a[i]);
if(last[i])printf("/ ");
}
printf("%d\n",a[n]);
} int main()
{
int cas;cin>>cas;
while(cas--)
{
cin>>n>>k;
long long tot=;
int maxx=-;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
tot+=a[i];
maxx=max(maxx,a[i]);
}
long long L=maxx,R=tot;
while(L<R)
{
int mid=(L+R)/;
if(!ok(mid) )L=mid+;
else R=mid;
}
show(L);
}
}
8-10 Coping Books uva714的更多相关文章
- 高效算法——B 抄书 copying books,uva714
Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status Description ...
- SqlServer 分页查询
1.not in方法 select top 10 from books where id not in (select top 30 id from books) 2.row_number()函数 ...
- 常用的CSS定位,XPath定位和JPath定位
CSS定位 举例 描述 div#menu id为menu的div元素 div.action-btn.ok-btn class为action-btn和ok-btn的div元素 table#emailLi ...
- oracle基础语法大全
-----创建序列create sequence book_idINCREMENT BY 1 -- 每次加几个 START WITH 001 -- 从1开始计数 NOMAXVALUE -- 不设置最大 ...
- 使用jsonpath解析json内容
JsonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的json内容.下面我把官网介绍的每个表达式用代码实现,可以更直观的知道该怎么用它. 一.首先需要 ...
- node-odata: 基于 NodeJS 的 REST 框架
该开源项目目前已被 OData 官网 (odata.org)收录 关于 node-odata node-odata 可以让你轻松创建 REST API, 并能使用 OData 协议的格式进行数据的查询 ...
- 使用 node-odata 轻松创建基于 OData 协议的 RESTful API
前言 OData, 相信身为.NET程序员应该不为陌生, 对于他的实现, 之前也有童鞋进行过介绍(见:这里1,这里2). 微软的WCF Data Service即采用的该协议来进行通信, ASP.NE ...
- iOS开发——实用篇&KVO与KVC详解
KVO与KVC详解 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC ...
- JsonPath详解
JsonPath is to JSON what XPATH is to XML, a simple way to extract parts of a given document. JsonPat ...
随机推荐
- 在centos6.5安装pg
环境:centos 6.5系统,连外网. 1.参考pg官方网站进行安装.(按照上面的命令行依次执行就行) https://www.postgresql.org/download/linux/redha ...
- Jupyter Notebook Tutorial: Introduction, Setup, and Walkthrough
Jupyter Notebook Tutorial: Introduction, Setup, and Walkthrough YouTube https://www.youtube.com/watc ...
- 双11怎么那么强!之二:浅析淘宝网络通信库tbnet的实现
最近开始看Tair的源码实现,Tair的通信使用的是淘宝的开源的网络库tbnet实现.具体来说是依靠tbnet::Transport类型实现,其源代码路径如下:http://code.taobao.o ...
- 【CC2530强化实训03】定时器间隔定时实现按键长按与短按
[CC2530强化实训03]定时器间隔定时实现按键长按与短按 [题目要求] 虽然用普通的延时函数能够实现按键长按与短按的判别,但是在实际的工程应用和项目开发中并不好用也不灵活.更多得是借助定时器的间隔 ...
- ORB_SLAM2 源码阅读 ORB_SLAM2::ORBextractor
整体架构 构造函数进行初始化,传入设定几个重要的成员变量.nfeatures(特征点的个数).nlevels(构造金字塔的层数).scaleFactor(金字塔中相邻层图像的比例系数).iniThFA ...
- C 之回调函数
软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用.同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用:回调是一种双向调用模式,也就是 ...
- Git log diff config高级进阶
Git 历史相关和 git config 高级进阶 前一段时间分享了一篇<更好的 git log>简要介绍怎么美化 git log 命令,其中提到了 alias命令,今天再继续谈谈 git ...
- iOS开发之删除Provisioning Profiles方法
1.在finder下打开go -> go to folder输入: ~/Library/MobileDevice/Provisioning Profiles 2.查看上面的列表,按照时间顺序删除 ...
- 修改类不用重启Tomcat加载整个项目
可以修改类不用重启Tomcat加载整个项目(手工启动) 配置reloadable=true(自动重载) 使用Debug模式,前提是仅限于局部修改.(修改类不用重启--热加载) Tomcat轻小,而We ...
- HTML5学习--SVG全攻略(基础篇)
明天高级篇 一.什么是SVG? SVG 指的是可伸缩矢量图形 (Scalable Vector Graphics),它用来定义用于网络的基于矢量的图形,使用 XML 格式定义图形.SVG 图像在放大或 ...