好久不更新主要是怠惰了。。。。还要加强训练。

题意分析与思路

注意到这样一句话:

our goal is to minimize the maximum number of pages assigned to a single scriber. Your task is to find the optimal assignment.

这种最大化最小、最小化最大,显然是二分。

如何二分呢,枚举分成k份中各份的最大值,判断在$max_t$的情况下能否分成$\le k$份,能的话那么我们的$max_t$还能更小,不然就得变大。虽然思路很简单,但是由于不熟练,还是写的满磕磕绊绊的,对状态细节的把握不熟练。

代码

#include <bits/stdc++.h>
#define MP make_pair
#define PB push_back
#define fi first
#define se second
#define ALL(x) (x).begin(),(x).end()
#define ZERO(x) memset((x),0,sizeof(x))
typedef long long ll;
typedef unsigned long long ull;
using namespace std; int p[505],m,k;
bool judge(int threshold)
{
int tmp=p[m],cnt=1;
for(int i=m-1;i>=1;--i)
{
if(tmp+p[i]<=threshold)
{
tmp+=p[i];
}
else
{
cnt++;
tmp=p[i];
}
}
if(cnt<=k) return true;
else return false;
} int main()
{
int kase; cin>>kase;
while(kase--)
{
cin>>m>>k;
ll l=-1,r=0;
for(int i=1;i<=m;++i)
{
cin>>p[i];
r+=p[i];
l=max(l,(ll)p[i]);
}
while(l<r)
{
int mid=(l+r)/2;
if(judge(mid)) r=mid;
else l=mid+1;
}
int tmp=0,cnt=1;
bool cur[505]; memset(cur,false,sizeof(cur));
//cout<<l<<" "<<r<<endl;
for(int i=m;i>=1;--i)
{
if(i<=k-cnt) { cur[i]=true; cnt++; /*cout<<i<<" set"<<endl;*/ }
else
{
if(tmp+p[i]<=l)
tmp+=p[i];
else
{
//cout<<i<<" put"<<endl;
tmp=p[i];
cur[i]=true;
cnt++;
}
} }
for(int i=1;i<=m;++i)
{
cout<<p[i];
if(i==m) cout<<endl;
else if(cur[i]) cout<<" / ";
else cout<<" ";
}
}
return 0;
}

最新文章

  1. 【2016-11-7】【坚持学习】【Day22】【Oracle 递归查询】
  2. js string 转 int Number()
  3. Atitit 项目的主体设计与结构文档 v3
  4. 网页打印A4纸-----表格在跨页时自动换页打印的实现 (转)
  5. Android实现地图服务
  6. LeetCode Single Number II 单元素2
  7. Distinct Substrings
  8. c# post方式发送请求
  9. UVA 103 Stacking Boxes 套箱子 DAG最长路 dp记忆化搜索
  10. Problem G: If We Were a Child Again
  11. 企业架构研究总结(32)——TOGAF架构内容框架之架构交付物
  12. 搭建MySQL高可用负载均衡集群
  13. Icehouse 创建Instance代码分析
  14. H+ 关闭menuTab页面
  15. docker 在window10下的安装
  16. Python 入门基础20 --面向对象_继承、组合
  17. HttpClient(4.5.x)正确的使用姿势
  18. issubclass ,isinstance,反射
  19. C#.NET常见问题(FAQ)-控制台程序如何做弹窗
  20. SaltStack 批量分发文件

热门文章

  1. openfiles_(命令)查看已打开的文件列表
  2. Linux 进程状态标识 Process State Definition
  3. express框架开发笔记
  4. ROS编译工作区缺少cv_bridge的问题解决
  5. HTML中id和class选择器
  6. 22.访问jar包下资源路径里的文件
  7. 分享一个展示文章列表的CSS样式
  8. Python基础—06-函数基础
  9. 论REST架构与传统MVC
  10. c# 常用数据库封装