题意:把一个包含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. study later

    二分图匹配.左偏树.替罪羊树 四边形不等式优化 http://txhwind.blog.163.com/blog/static/203524179201242021458422/ http://www ...

  2. POJ No 3259 Wormholes Bellman-Ford 判断是否存在负图

    题目:http://poj.org/problem?id=3259 题意:主要就是构造图, 然后判断,是否存在负图,可以回到原点 /* 2 3 3 1 //N, M, W 1 2 2 1 3 4 2 ...

  3. 三个你不知道的CSS技巧

    各种浏览器之间的竞争的白热化意味着越来越多的人现在开始使用那些支持最新.最先进的W3C Web标准的设备,以一种更具交互性的方式来访问互联网.这意味着我们终于能够利用更强大更灵活的CSS来创造更简洁, ...

  4. 20155235 2016-2017-2 《Java程序设计》第5周学习总结

    20155235 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 第八章知识点 语法与继承结构 使用try.catch 异常继承结构 要抓还是要抛 贴心还是造 ...

  5. java学习第01天(搭建环境配置)

    搭建环境配置分为3个步骤 1.下载并安装 jdk使用1.8.0_151版本,下载地址(包含32位和64位):链接:https://pan.baidu.com/s/1qZau8oO 密码:0t5o 2. ...

  6. react页面间传递参数

    react-router页面跳转,带请求参数 this.context.router.push({pathname:'/car_datail',state:{item:"hello" ...

  7. Solr管理索引库——(十三)

    a)          维护索引 1.  添加/更新文档 添加或更新单个文档

  8. AopProxyUtils.getSingletonTarget(Ljava/lang/Object;)Ljava/lang/Object;大坑

    这个问题太坑了,试了好多个版本,都是依赖冲突导致的, https://blog.csdn.net/qq_15003505/article/details/78430595 最后找到这一篇博客解决了,就 ...

  9. JDOM生成XML文档的一般方法

    由于DOM提供的生成XML的方法不够直观,而且要用到各种繁琐的注解,鉴于此可借助第三方库-----JDOM生成XML文档.具体操作方式如下: import java.io.FileOutputStre ...

  10. 重写Java Object对象的hashCode和equals方法实现集合元素按内容判重

    Java API提供的集合框架中Set接口下的集合对象默认是不能存储重复对象的,这里的重复判定是按照对象实例句柄的地址来判定的,地址相同则判定为重复,地址不同不管内容如何都判定为不重复,这有时与需求不 ...