UVa 11100 The Trip, 2007
今天的教训:做题要用大块的时间来做,上午做一下,做题做到一半就去忙别的事,那么后面再做的时候就无限CE,WA了。因为你很难或者需要很长时间来找回当时的思路。
题意:就像套瓷娃娃一样,有n个包,大小可能一样可能不一样,而且小的包只能被严格比它大的包包裹上。问如何打包,才能使总的包数最小,在这个前提下,还要使包裹的最多的那个包数量最少。
对这个题再抽象一次:有一个序列,要求将所有的元素划分成尽可能少的严格递增子序列,在这个前提下,最长子序列的长度尽可能少(也就是尽可能将这些元素平均分配到这些子序列中)。
分析:
确定子序列的个数:子序列的个数就等于原序列中重复元素最多的次数
每个子序列的长度:假设原序列长度是n,子序列的个数是m。那么每个子序列的长度就是n/m 或 n/m + 1 (除法是向下取整)
如何尽量平均分配:将原序列从小到大排序后,从第一个元素开始,依次取后面的第m个元素,直到取到尽头,这是第一个子序列。第二个子序列就是从第二个元素开始取,以此类推。
保证元素的平均分配这是比较显然的了吧。
因为重复最多的才重复m次,所以元素a后面的第m个元素必定大于它,这保证了子序列的严格递增。
//#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int maxn = + ;
int a[maxn], b[maxn]; int main(void)
{
#ifdef LOCAL
freopen("11100in.txt", "r", stdin);
#endif int n;
bool flag = false;
while(scanf("%d", &n) == && n)
{
int times = , i, j;
if(flag) printf("\n");
flag = true; memset(b, , sizeof(b));
for(i = ; i < n; ++i)
{
scanf("%d", &a[i]);
++b[a[i]];
times = max(times, b[a[i]]);
} printf("%d\n", times);
sort(a, a + n);
for(i = ; i < times; ++i)
{
for(j = i; j < n - times; j += times)
printf("%d ", a[j]);
printf("%d\n", a[j]);
}
}
return ;
}
代码君
UVa 11100 The Trip, 2007的更多相关文章
- UVA 11100 The Trip, 2007 水题一枚
题目链接:UVA - 11100 题意描述:n个旅行箱,形状相同,尺寸不同,尺寸小的可以放在尺寸大的旅行箱里.现在要求露在最外面的旅行箱的数量最少的同时满足一个旅行箱里放的旅行箱的数量最少.求出这样满 ...
- UVA 11100 The Trip, 2007 (贪心)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- UVA 11100 The Trip, 2007 贪心(输出比较奇葩)
题意:给出n个包的大小,规定一个大包能装一个小包,问最少能装成几个包. 只要排序,然后取连续出现次数最多的数的那个次数.输出注意需要等距输出. 代码: /* * Author: illuz <i ...
- UVa 11100 - The Trip, 2007 难度: 0
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- UVa 11100 The Trip, 2007 (题意+贪心)
题意:有n个包,其中小包可以装到大的包里,包的大小用数字进行表示,求最小的装包数量. 析:这个题的题意不太好理解,主要是有一句话难懂,意思是让每个最大包里的小包数量的最大值尽量小,所以我们就不能随便输 ...
- The trip(Uva 11100)
题目大意: 给出n个数,要求将其分成最少的递增序列,保证序列最少的同时要使得序列长度的最大值最小. n<=10000 题解: 1.我是直接看着<训练指南>里的中文题面的,lrj似乎 ...
- UVa 11100 旅行2007
https://vjudge.net/problem/UVA-11100 题意: 给定n个正整数,把它们划分成尽量少的严格递增序列,尽量均分. 思路: 因为必须严格递增,所以先统计每个数字出现的次数, ...
- UVA11100- The Trip, 2007
option=com_onlinejudge&Itemid=8&category=512&page=show_problem&problem=2041"> ...
- Uva 网络(Network,Seoul 2007,LA 3902)
#include<iostream> #include<cstring> #include<vector> using namespace std; +; int ...
随机推荐
- php随机数怎么获取?一个简单的函数就能生成
小美女建了一个站,有些页面相似度比较高,想添加一些字段来实现差异化,比如用php随机数生成从10到100之间随机一个数字.其实会php的朋友几十个字符就能实现了,如下代码所示,简单吧?10代表最小值, ...
- PHP READ PPT FILE
function parsePPT($filename) { // This approach uses detection of the string "chr(0f).Hex_value ...
- 创建本地yum源及grouplist 出错
RHEL有时候使用自定义的YUM源是很方便的事情. yum install createrepo createrepo /your/repo/directory/ 不过由于粗心,本人在使用时遇到很郁闷 ...
- 请教DotNetBar控件中的CalendarView控件如何拖动当前的时间轴
本人想拖动那个当前的时间轴或者让时间轴变动,因为那个时间轴默认的是当前时间.(就是那个黄色的线)
- hdu5017 Ellipsoid(旋转)
比赛的时候跳进这个大坑里,最后代码是写出来了.看到好像很多都是模拟退火做的,下面提供一个奇怪的思路吧. ax^2+by^2+cz^2+dyz+exz+fxy=1(*) 通过一些奇特的YY我们可以知道这 ...
- 传说中的WCF(7):“单向”&“双向”
在WCF中,服务器与客户端的通讯有单向(单工)和双向(双工)之分.要说有什么形式上的表现,那就是单向与双向生成的SOAP不同,咱们先放下代码不说.但通常情况下,我们也不太需要去研究生成的SOAP是啥样 ...
- 8天学通MongoDB——第二天 细说增删查改
原文地址:http://www.cnblogs.com/huangxincheng/archive/2012/02/19/2357846.html 看过上一篇,相信大家都会知道如何开启mongodb了 ...
- 问题:-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "BlueView" nib but the view outlet was not set.
问题:-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "BlueView" nib but the vie ...
- 【Apache运维基础(3)】虚拟主机配置说明
建议在主配置文件中增加一句 Include conf/vhosts/*.conf 然后就在vhosts目录下添加虚拟主机配置文件 在配置前打开NameVirtualHost *:80注释,注意此处要与 ...
- 如何在solution中添加一个test case
在solution Explorer中右键点击需要添加的folder,选择Add-New Item.也可以选择使用相应Unit Test之类的.Generic Test一般用于创建manual cas ...