博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU - 5884 - Sort
阅读量:6671 次
发布时间:2019-06-25

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

 

题意

给你n个序列以及序列内元素个数,现要求进行归并,花费为归并过程中序列长度的和,给定一个花费T,问最小的k(每次归并的最大序列个数)为多少。

 

分析

首先应该想到的是二分。然后思考如何check呢。排序,贪心的来,每次都选最小的前若干个。要注意的是,最后k-1个当然是在最后一次归并,那么要满足这样的情况,我们要判断(n-1)%(k-1)是否有剩余,有的话就先进行一次[余数+1]的归并,这样就保持了最优。

 

 

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;const int maxn=1e5+10;int t,n;int a[maxn],sum[maxn];priority_queue< int, vector
, greater
> q;bool check(int k){ while( !q.empty() ) q.pop(); int m=(n-1)%(k-1); int res=0; if(m){ m++; res+=sum[m]; q.push(res); } for(int i=m+1;i<=n;i++) q.push(a[i]); int up=(n-1)/(k-1); for(int i=0;i
t) return false; return true;}int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d%d",&n,&t); sum[0]=0; for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+1+n); for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i]; int l=2,r=n,mid; while(l
>1; if(check(mid)) r=mid; else l=mid+1; } if(n<=1) r=1; cout<
<

 

转载于:https://www.cnblogs.com/fht-litost/p/7442240.html

你可能感兴趣的文章
maven编译时出现There are test failures
查看>>
SpringBoot | 第三十一章:MongoDB的集成和使用
查看>>
网络学习笔记2
查看>>
JPA--多对多关系
查看>>
配置sharepoint 2010错误:Microsoft.SharePoint.Upgrad...
查看>>
UUID 生成算法JS版
查看>>
JAVA中,Map转实体类、实体类转Map的方法
查看>>
获取n!的末尾有多少个0?
查看>>
使用递归遍历并转换树形数据(以 TypeScript 为例)
查看>>
PHP类推荐:QueryList|基于phpQuery的无比强大的PHP采集工具
查看>>
windows下实现wamp与tomcat环境整合
查看>>
我的友情链接
查看>>
Windows Server 2012 R2搭建IIS服务器
查看>>
SCVMM 2012 R2运维管理二之:安装域控制器
查看>>
[Fibre Channle 实战之三]FC 和iSCSI的使用差异
查看>>
c#winform选择文件,文件夹,打开指定目录方法
查看>>
traceroute
查看>>
如何划分man文档的章节
查看>>
微信公众号的分类
查看>>
分布式高可用存储(drbd+corosync+pacemaker+MooseFS)
查看>>