Bob 和 Alice 是青梅竹马。今天,Bob 终于要鼓起勇气向 Alice 表白了!说到表白,自然是少不了买花了。Bob 来到了花店,花店一共提供了 9 种花,每一种花都有对应的价钱。但是 Bob 的零花钱有限,不能把所有的花都买下来送给 Alice。为了方便挑选,Bob 给这 9 种花分别标号 1-9,Bob 希望买到的花按照编号可以排出尽可能大数字,请问 Bob 能够排出的最大的数字是多少?输入一个正整数 value,代表 Bob 拥有的零花钱。(0<=value<=10^6)和有 9 个数字的数组 a,ai 代表第 i 种花的价格。(1<=ai<=10^5,1<=i<=9)输出一个数字,表示 Bob 可以排出的最大数字。如果 Bob 不能排出任何一个数字,则输出 -1。
首先,选取最大值,意味着首先这个结果的“位数”要足够多,比如假设所有的花价格都是 1 元钱,则 11111111 是花 9 块钱能买到的最大值,而不是 333 或者 9这样的方案。这样相当于根据输入,输出的位数可以用很小的时间代价来确定:“用可用钱数,除以最便宜的花的价格,并向下取整”。假设这里的位数为 m。其次,在位数确定的情况下,高位数字越大,结果也就越大,比如同样是8元钱,只能购买价格为5的5号花,和价格为3的3号花时,购买35就是最差的方案,而 53 才是正确答案。而且因为每个花的数量是无限的,所以可以模拟这个“从高位开始,逐个选取能买得起的最大的数字;同时每选完一位后,要确保剩下的钱,依旧可以买到 m 位数字的组合方案。” 则输入:2 [9,11,1,12,5,8,9,10,6] 输出:33
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。