SRM 616 ColorfulCoins

题意:给定一个从小到大的货币面值,每一个面额都是其前面面额的倍数(倍数大于等于2),每一种货币面值对应一种颜色,目前不清楚面值与颜色的对应关系。要求用最少的查询次数来确定面额与颜色的对应关系。(一次查询是要求给出面额总数某一个值的货币即可,假设给出的货币数目总是最少的,而且是可行的)

官方题解:http://apps.topcoder.com/wiki/display/tc/SRM+616

keypoint:

1 答案与具体的钱的大小无关,至于相邻钱之间的倍数有关系,假设有n个倍数关系。

2 假设每一次查询每一种面值的钱的数目为矩阵的行,不同的查询组成矩阵的列,假设我们需要m次查询,则这m次查询组成了一个m行n列的矩阵。矩阵满足以下条件即可: 每一列至少有一个数为1 , 任意两列必须有一个对应元素不同,这样子才能够保证能够区分。 最少需要多少个m呢?

3 可以把倍数关系从小到大排列起来。

简单的说当进制为2的时候,m位最多只能填 2^m-1 >=n.

例子:

进制: 2    2    3    3    3    3   3

           0    1    1    1    2    2    2
                    1    0    1    2    0    1    2

进制: 2    2    3    3    3    3   3   3

           0    1     0      1    1    2    2    2
                    1    0    2     1    2    0    1    2


           进制:2    2    2    2    2    3    3   

0    0    0    1    1    1    1    1
         0    1    1    0    0    1    1    1
         1    0    1    0    1    0    1    2

通过第一个例子就可以很明显的看出,算法已经非常非常显然了!

转载于:https://www.cnblogs.com/sosi/p/3685768.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值