题目大意

大箱子能装小箱子,求在满足最少箱子的情况下,最小化每个箱子中最大的箱子个数.

解析

想到二分枚举箱子数,然后贪心的选择放进箱子的位置.

最优策略一定是将最大的 \(m\) 个先找出来,然后把剩下的放到这 \(m\) 个中,

我们发现子问题和上述问题是一样的, 所以贪心策略不变.

只需要判断这样贪心出来会不会有违反递减序列性质的就行了

注意: 一定要每个 case 间输出空格, 数的末尾不能有多余空格, 不然会 WA

代码

#include <bits/stdc++.h>
using namespace std; #define rep(i, s, t) for (int i = (int)(s); i <= (int)(t); ++ i) const int maxn = 1e4 + 10;
int a[maxn], n; vector<int> b[maxn]; bool check(int m) {
for (int i = 0; i < maxn; ++ i) b[i].clear();
for (int i = 1; i <= m; ++ i) b[i].push_back(a[i]);
for (int i = m + 1; i <= n; ++ i) {
int next = (i - 1) % m + 1;
if (a[i] < *(b[next].end() - 1)) b[next].push_back(a[i]);
else return false;
}
return true;
} int main() {
while (~scanf("%d", &n) && n) {
rep(i, 1, n) scanf("%d", a + i);
sort(a + 1, a + n + 1); reverse(a + 1, a + n + 1);
int l = 1, r = n, mid;
while (l < r) {
if (check(mid = (l + r) >> 1)) r = mid; else l = mid + 1;
}
check(l); printf("%d\n", l);
vector<int>::iterator it;
for (int i = 1; i <= l; ++ i) {
sort(b[i].begin(), b[i].end());
printf("%d", *b[i].begin());
for (it = b[i].begin()+1; it != b[i].end(); ++ it) {
printf(" %d", *it);
}
putchar(10);
}
putchar(10);
}
}

[UVA-11100] The Trip的更多相关文章

  1. UVA 11100 The Trip, 2007 水题一枚

    题目链接:UVA - 11100 题意描述:n个旅行箱,形状相同,尺寸不同,尺寸小的可以放在尺寸大的旅行箱里.现在要求露在最外面的旅行箱的数量最少的同时满足一个旅行箱里放的旅行箱的数量最少.求出这样满 ...

  2. UVA 11100 The Trip, 2007 (贪心)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  3. UVA 11100 The Trip, 2007 贪心(输出比较奇葩)

    题意:给出n个包的大小,规定一个大包能装一个小包,问最少能装成几个包. 只要排序,然后取连续出现次数最多的数的那个次数.输出注意需要等距输出. 代码: /* * Author: illuz <i ...

  4. UVa 11100 - The Trip, 2007 难度: 0

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  5. UVa 11100 The Trip, 2007

    今天的教训:做题要用大块的时间来做,上午做一下,做题做到一半就去忙别的事,那么后面再做的时候就无限CE,WA了.因为你很难或者需要很长时间来找回当时的思路. 题意:就像套瓷娃娃一样,有n个包,大小可能 ...

  6. UVa 11100 The Trip, 2007 (题意+贪心)

    题意:有n个包,其中小包可以装到大的包里,包的大小用数字进行表示,求最小的装包数量. 析:这个题的题意不太好理解,主要是有一句话难懂,意思是让每个最大包里的小包数量的最大值尽量小,所以我们就不能随便输 ...

  7. The trip(Uva 11100)

    题目大意: 给出n个数,要求将其分成最少的递增序列,保证序列最少的同时要使得序列长度的最大值最小.  n<=10000 题解: 1.我是直接看着<训练指南>里的中文题面的,lrj似乎 ...

  8. UVa 11100 旅行2007

    https://vjudge.net/problem/UVA-11100 题意: 给定n个正整数,把它们划分成尽量少的严格递增序列,尽量均分. 思路: 因为必须严格递增,所以先统计每个数字出现的次数, ...

  9. <算法竞赛入门经典> 第8章 贪心+递归+分治总结

    虽然都是算法基础,不过做了之后还是感觉有长进的,前期基础不打好后面学得很艰难的,现在才慢慢明白这个道理. 闲话少说,上VOJ上的专题训练吧:http://acm.hust.edu.cn/vjudge/ ...

  10. UVA题目分类

    题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...

随机推荐

  1. js/jquery对特殊字符进行转义防止js注入使用示例

      /** JQuery Html Encoding.Decoding * 原理是利用JQuery自带的html()和text()函数可以转义Html字符 * 虚拟一个Div通过赋值和取值来得到想要的 ...

  2. android基本架构

    Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA ...

  3. 在centos上搭建Git服务器

    第一步:先安装一些相关依赖库和编译工具 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel yum in ...

  4. glog日志库移植Android平台

    1.在linux平台下使用ndk交叉编译链编译glog生成libglog.a静态库. 2.将生成的库文件与头文件放到Android项目中,使用JNI方法调用. 3.编译遇到错误“stderr.stdo ...

  5. Java用Gson遍历json所有节点

    <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</ar ...

  6. String类型转json 转JSONObject 转 JSONArray 以及 遍历

    public PageVo getByPage(int pageNum, int pageSize) { PageVo pageVo = new PageVo(); System.out.printl ...

  7. 数据分析之pandas01

    Series 一.Series Series是一种类似于一维数组的对象,有两部分组成:     .values:一组数据(ndarray类型)     .index: 相关的数据索引标签 二.seri ...

  8. session(概念、session对象的获取、删除、验证)

    # 1.session(会话)是什么? 服务器为了保存用户状态而创建的一个特殊的对象. 注: 当浏览器访问服务器时,服务器会创建一个session对象(该对象有一个唯一的id,一般称之为session ...

  9. Java连接数据库 #04# Apache Commons DbUtils

    索引 通过一个简单的调用看整体结构 Examples 修改JAVA连接数据库#03#中的代码 DbUtils并非是什么ORM框架,只是对原始的JDBC进行了一些封装,以便我们少写一些重复代码.就“用” ...

  10. manytomany django 正查, 反查

    models from django.db import models from django.contrib.auth.models import User class GroupSheet(mod ...