题意:把一个包含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的更多相关文章

  1. 高效算法——B 抄书 copying books,uva714

    Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Description ...

  2. SqlServer 分页查询

    1.not in方法 select top 10 from books where id not in (select top 30 id from books)   2.row_number()函数 ...

  3. 常用的CSS定位,XPath定位和JPath定位

    CSS定位 举例 描述 div#menu id为menu的div元素 div.action-btn.ok-btn class为action-btn和ok-btn的div元素 table#emailLi ...

  4. oracle基础语法大全

    -----创建序列create sequence book_idINCREMENT BY 1 -- 每次加几个 START WITH 001 -- 从1开始计数 NOMAXVALUE -- 不设置最大 ...

  5. 使用jsonpath解析json内容

    JsonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的json内容.下面我把官网介绍的每个表达式用代码实现,可以更直观的知道该怎么用它. 一.首先需要 ...

  6. node-odata: 基于 NodeJS 的 REST 框架

    该开源项目目前已被 OData 官网 (odata.org)收录 关于 node-odata node-odata 可以让你轻松创建 REST API, 并能使用 OData 协议的格式进行数据的查询 ...

  7. 使用 node-odata 轻松创建基于 OData 协议的 RESTful API

    前言 OData, 相信身为.NET程序员应该不为陌生, 对于他的实现, 之前也有童鞋进行过介绍(见:这里1,这里2). 微软的WCF Data Service即采用的该协议来进行通信, ASP.NE ...

  8. iOS开发——实用篇&KVO与KVC详解

    KVO与KVC详解 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC ...

  9. JsonPath详解

    JsonPath is to JSON what XPATH is to XML, a simple way to extract parts of a given document. JsonPat ...

随机推荐

  1. [USACO5.3]量取牛奶Milk Measuring

    https://daniu.luogu.org/problemnew/show/P2744 滚动数组压去第一维:前i种木桶 f[j] 量取体积j最少需要几种木桶 g[j]  体积j的最优解是否使用了第 ...

  2. 调用weka模拟实现 “主动学习“ 算法

    主动学习: 主动学习的过程:需要分类器与标记专家进行交互.一个典型的过程: (1)基于少量已标记样本构建模型 (2)从未标记样本中选出信息量最大的样本,交给专家进行标记 (3)将这些样本与之前样本进行 ...

  3. Maven项目中通过profile定义使不同环境使用不同配置信息

    profile可以让我们定义一系列的配置信息,然后指定其激活条件.这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果.比如 ...

  4. 微服务深入浅出(5)-- 声明式调用Feign

    Feign的使用 Feign采用了声明式的API接口的风格,将Java Http客户端绑定到它的内部,从而调用过程变的简单. 配置文件: spring: application: name: eure ...

  5. [转]C++ 取代switch的三种方法

    1.常规switch enum EnumType { enumOne, enumTwo, enumThree }; void showMessage(int type) { switch(type) ...

  6. 2016.07.15——istringstream测试

    istringstream测试 1.istringstream strcin(str),字符串(str)可以包括多个单词,单词之间使用空格分开 #include "stdafx.h" ...

  7. Spring4笔记10--SSH整合1--Spring与Hibernate整合

    SSH 框架整合技术: 1. Spring与Hibernate整合(对比Spring与JDBC模板): Service业务层代码和测试类都不变,添加实体类的映射配置文件: <?xml versi ...

  8. 【工具记录】Linux口令破解

    1.基础知识 /etc/passwd:记录着用户的基本属性,所有用户可读 字段含义如下: 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell eg: root:x:0:0:root ...

  9. go 切片练习

    下列程序输出什么? package main import "fmt" func main() {     var sa = make([]string, 5, 10)     f ...

  10. linux下使用indent整理代码(代码格式化)【转】

    转自:https://blog.csdn.net/jiangjingui2011/article/details/7197069 常用的设置: indent -npro -kr -i8 -ts8 -s ...