Benelux Algorithm Programming Contest 2019 E. Efficient Exchange(动态规划dp)

Efficient Exchange

https://nanti.jisuanke.com/t/44331
E. Efficient Exchange

Google翻译中文题意

您最近在银行获得了一份新奇的货币工作。人们可以在这里付款,并以各种奇怪的货币存入或提取钱。在工作的第一天,您会帮助来自奈梅贾的客户,奈梅贾是一个微不足道的小国,以巨大的硬币而闻名,其价值等于10的幂,即1、10、100、1000等。该客户希望相当大的一笔付款,您不希望携带所有这些硬币往返金库。
因此,您决定先思考。您和客户一样都有大量的尼吉米亚硬币储备(大多数尼吉米亚公民都非常强大)。现在,您要尽量减少在任一方向上交换的硬币总数,以准确支付客户必须支付的费用。

例如,如果客户要支付83个硬币,则有很多方法可以进行兑换。这是三种可能性:

  • 方法1: 客户支付8个价值10的硬币和3个价值1的硬币。这需要交换8 + 3 = 11个硬币。
  • 方法2:客户支付了一个价值100的硬币,您返回了价值10的硬币和7个价值1的硬币。这需要交换1 +1 + 7 = 9个硬币。
  • 方法3:客户支付一枚价值100的硬币和3枚价值1的硬币。您返回2枚价值10的硬币。这需要交换1 + 3 + 2 = 6枚硬币。

事实证明,这样做的最后一种方法需要最少的硬币。

输入
0 ≤ n < 1 0 1000 0\le n < 10^{1000} 0n<101000,客户必须支付的金额的一个整数。

输出
输出为进行所需付款而必须兑换的最小硬币数量。


样例输入1
83
样例输出1
6
样例输入2
13
样例输出2
4
样例输入3
12345678987654321
样例输出3
42


题解:
考虑 1254 x 1254x 1254x , 令 a = 12540 , b = 12550 , a = 12540, b = 12550, a=12540,b=12550,
可得 1254 x = 12540 + x 1254x = 12540+x 1254x=12540+x 或者 12550 − 10 + x ,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值