UVa 102|Ecological Bin Packing|暴力

31 篇文章 0 订阅

原文地址:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=38

题目翻译

回收玻璃的时候需要将玻璃分成3个类别:棕色玻璃,绿色玻璃和无色玻璃。本问题中,给出3个回收箱,每个回收箱都装有一定数量的棕色、绿色和无色玻璃瓶。为了回收这些玻璃瓶,这些瓶子需要被重新分类到3个桶中,使得每个桶只装一种颜色的玻璃瓶。
你需要写个程序,求出移动瓶子满足上述要求的最小移动次数,移动一个瓶子算一次。每个桶的容量均为无穷大,保证程序运算中间结果在32位整数范围内。

输入

输入有多组数据,每组数据一行9个整数。前3个整数分别表示第一个桶里的棕色、绿色和无色的塑料瓶的个数;中间3个整数分别表示第二个桶里的棕色、绿色和无色的塑料瓶的个数;后3个整数分别表示第三个桶里的棕色、绿色和无色的塑料瓶的个数。

比如:
10 15 20 30 12 8 15 8 31
表示第一个桶里有20个透明塑料瓶,第二个桶里有12个绿色塑料瓶,第三个桶里有15个棕色塑料瓶。

一行内的整数由一个或多个空格分隔开,你的程序需要处理输入文件的所有行。

输出

对于每组数据输出一行,表明3个桶分别存放什么颜色的桶,能使得移动瓶子的次数最少,并输出这个次数。

输出由一个由三个大写字符'B', 'G', 'C'(表示棕色、绿色和无色)字符串(表示三个桶依次存放那种颜色的瓶子)和一个整数(表示这么安排下移动瓶子的次数)。

如果对于最少移动瓶子的次数,有多种安排桶的方法,输出按字符串(上面描述的)字典序最小的那种。

样例输入

1 2 3 4 5 6 7 8 9
5 10 5 20 10 5 10 20 10

样例输出

BCG 30
CBG 50

题解

如果颜色的个数小于等于10的话,我们可以暴力DFS查出所有安排桶的情况,然后找出最优的方案即可。

然后本题固定只有3种颜色,6种情况。。。然后。。。

#include <cstdio>
#define rep(i,j,k) for(i=j;i<k;++i)
int main() {
    char type[6][5] = { "BCG", "BGC", "CBG", "CGB", "GBC", "GCB" };
    long long n[3][3], tot[6];

    while (scanf("%lld%lld%lld%lld%lld%lld%lld%lld%lld",
        &n[0][0], &n[0][1], &n[0][2],
        &n[1][0], &n[1][1], &n[1][2],
        &n[2][0], &n[2][1], &n[2][2]) == 9) {
        tot[0] = n[1][0] + n[2][0] + n[0][2] + n[2][2] + n[0][1] + n[1][1]; // BCG: 2B,3B->1B 1C,3C->2C 1G,2G->3G
        tot[1] = n[1][0] + n[2][0] + n[0][1] + n[2][1] + n[0][2] + n[1][2]; // BGC: 2B,3B->1B 1G,3G->3G 1G,2C->3C
        tot[2] = n[1][2] + n[2][2] + n[0][0] + n[2][0] + n[0][1] + n[1][1]; // CBG: 2C,3C->1C 1B,3B->2B 1G,2G->3G
        tot[3] = n[1][2] + n[2][2] + n[0][1] + n[2][1] + n[0][0] + n[1][0]; // CGB: 2C,3C->1C 1G,3G->2G 1B,2B->3B
        tot[4] = n[1][1] + n[2][1] + n[0][0] + n[2][0] + n[0][2] + n[1][2]; // GBC: 2G,3G->1G 1B,3B->2B 1C,2C->3C
        tot[5] = n[1][1] + n[2][1] + n[0][2] + n[2][2] + n[0][0] + n[1][0]; // GCB: 2G,3G->1G 1C,3C->2C 1B,2B->3B
        long long i, mi = tot[0], p = 0;
        rep(i,0,6) if (tot[i] < mi) {
            mi = tot[i];
            p = i;
        }
        printf("%s %lld\n", type[p], tot[p]);
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: bin格式点云数据通常是一种二进制格式,其包含了点云数据的x、y、z坐标、颜色等信息。下载这种格式的点云数据需要注意以下几个步骤: 首先需要找到可供下载的bin格式点云数据源,可以从一些公共库或者私人数据集中寻找。比如,对于地理信息系统(GIS)领域的点云数据,可以从OpenTopography、National Ecological Observatory Network等公共库中找到相关数据。 其次,在下载之前需要确保计算机拥有足够的存储空间来存储这些数据,因为点云数据相对于其他图像数据而言会更加庞大。 然后,在下载的过程中需要注意选择适当的下载工具或者下载方式来保证下载的速度和稳定性。对于大型点云数据的下载,可以考虑使用分块、断点续传等方式来提高下载效率并保证数据完整性。 最后,在下载完成之后,需要认真对下载的数据进行校验和前期处理以确保数据的可用性。这包括将数据存储到合适的位置、选择合适的工具对数据进行清洗和分析、以及将数据转换为其他格式以便于使用等。 总的来说,bin格式点云数据的下载需要细心、认真地进行,并且需要结合后续的数据处理工作来最大程度地发掘数据的潜在价值。 ### 回答2: bin格式是点云数据常用的一种文件格式,它将点云数据以二进制数值的形式存储在文件中。如果你想要下载bin格式点云数据,一种简单的方法是通过网络上的点云数据网站进行下载。 首先,你可以在网站上搜索你需要的点云数据,然后筛选出采用bin格式存储的数据。接下来,你可以点击下载按钮,等待下载完成。 下载完成后,你需要使用点云数据的处理软件进行打开和读取。常见的点云数据处理软件有PCL、CloudCompare等。在打开文件时,需要设置bin格式的文件名和存储格式,一般在读取速度和存储空间之间进行取舍。读取完成后,你可以对点云数据进行各种处理操作,如滤波、配准、分割等。 需要注意的是,bin格式虽然存储速度和占用空间比较小,但是它不具有通用性,不同点云数据采用的存储格式可能存在差别。因此,在使用bin格式点云数据时,需要事先了解文件的存储格式,以便正确读取和使用数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值