UVa 11100 - The Trip, 2007

本文介绍了一个关于装箱的贪心算法问题,通过排序和统计重复元素的最大连续次数来确定最少剩余箱子的数量,并给出了一种使得每个箱子内物品数量尽量均匀的解决方案。

題目:給你一些箱子,相對小的箱子和以放進大箱子,問最少剩下幾個箱子,並且每個箱子裝的盡量少。

分析:貪心,數論。排序,出現次數最多的那個數字就是剩下的箱子個數d。

            題目要求每個箱子裝的盡量少,就是要裝的平均的意思,這裡將排序后的箱子等距離d輸出即可;

            (距離d可以保證每個必不相同,因為任意兩個相同的數字間的差必小於d);

說明:╮(╯▽╰)╭。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

int data[10001];

int main()
{
	int n, t = 0;
	while (~scanf("%d",&n) && n) {
		for (int i = 0; i < n; ++ i)
			scanf("%d",&data[i]);
		sort(data, data+n);
		
		int count = 1, max = 1;
		for (int i = 1; i < n; ++ i) {
			if (data[i] != data[i-1])
				count = 1;
			else count ++;
			if (max < count)
				max = count;
		}
		
		if (t ++) printf("\n");
		printf("%d\n",max);
		for (int i = 0; i < max; ++ i) {
			for (int j = i; j < n; j += max) {
				if (j >= max) printf(" ");
				printf("%d",data[j]);
			}
			printf("\n");
		}
	} 
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值