我们有一个数字N和成本C,(范围N <10 ^ 18,C <100) 现在我们必须花费最多的C卢比来将数字转换成另一个。
将数字转换为另一个的规则如下:
1)数字可以转换为具有相同位数且没有前导零的其他数字。 2)将数字转换为其他数字的成本是相应数字的绝对差值之和。例如,将235转换为331的成本是5(因为相应数字的绝对差值是| 3-2 | + | 3-3 | + | 1-5 |,这是| 1 | +0 + | -4 | = 5。 现在我们需要找到多少个3的数字,这可以在最大预算(C卢比)内完成。
我的方法: 我首先尝试使用3的可分性规则并找到N的数字之和 现在,如果成本只是数字差异的总和,那么我们可以简单地做和是3的倍数 比如2 + 3 + 5 = 10成本是2 我们可以通过增加任何数字2,3或5乘以2来实现它 435,255,237这是对的吗? 当c是绝对和时,如何解决这个问题
答案 0 :(得分:0)
让 cost(a,b)表示将 a 转换为 b 并定义
的成本 N(a,c) = # { b | cost(a,b) = c }
即, N(a,c)是 a 的成本完全 c 的数字的数量。
让我们进一步假设_a_is可被3整除。那么我们感兴趣的数字是:
answer = N(a,0) + N(a,3) + N(a,6) + N(a,9) + ... + N(a,99)
如果 a 是1 mod 3,我们希望总和 N(a,2)+ N(a,5)+ ... + N(a,98)
要计算 N(a,c),对于 a 中的每个数字 d ,构造一个多项式 P(d) 在哪里 系数 x ^ k 是[0..9]中的数字,它们正是 k 远离 d 。这些系数将始终为0,1或2。
例如,对于 a = 3496,多项式为:
d 1 x x^2 x^3 x^4 x^5 x^6 x^7 x^8 x^9
-- --- --- --- --- --- --- --- --- --- ---
3 1 2 2 1 1 1 1 0 0 0
4 1 2 2 2 2 1 0 0 0 0
9 1 1 1 1 1 1 1 1 1 1
6 1 2 2 2 1 1 1 0 0 0
N.B。:数字3的 x ^ 3 的系数 是1而不是2,因为不允许前导零。
现在将多项式相乘, N(a,c)是 x ^ c 的系数 在最终的产品中。