首页 > 其他分享 >最少硬币支付问题 c的幂次方证明

最少硬币支付问题 c的幂次方证明

时间:2023-05-03 14:01:24浏览次数:44  
标签:... 硬币 面值 最少 等于 次方 大于

假设硬币的面值为\(c^0, c^1, ..., c^k\),其中c是一个大于1的整数,k是一个大于等于1的整数。设\(a_i\)是找n分钱的最优解中面值\(c^i\)的硬币的数量,那么对于\(i=0,1,...,k-1\),有\(a_i < c\)。这是因为如果\(a_i >= c\),那么可以用一个面值\(c^{i+1}\)的硬币替换c个面值\(c^i\)的硬币,从而减少了c-1个硬币,这与最优解矛盾。

设j是满足\(c^j <= n\)的最大整数,那么贪心算法会选择至少一个面值\(c^j\)的硬币。如果不选择面值\(c^j\)或更大的硬币,那么设非贪心解使用\(b_i\)个面值\(c^i\)的硬币,对于\(i=0,1,...,j-1\),那么有\(b_0 * c^0 + b_1 * c^1 + ... + b_{j-1} * c^{j-1} = n\)。由于\(n >= c^j\),所以上式左边大于等于\(c^j\)。又由于\(b_i < c\),所以上式左边小于等于\((c-1) * (c^0 + c^1 + ... + c^{j-1}) = (c-1) * (c^j - 1) / (c - 1) = c^j - 1 < c^j\)。这与上面推出的左边大于等于\(c^j\)矛盾。所以不选择面值\(c^j\)或更大的硬币不能产生最优解。

因此,当硬币面值为c的幂次方时,最少硬币支付问题能使用贪心算法.

标签:...,硬币,面值,最少,等于,次方,大于
From: https://www.cnblogs.com/FanWQ/p/17368985.html

相关文章

  • AcWing 656. 钞票和硬币
    AcWing656.钞票和硬币1.地址https://www.acwing.com/problem/content/658/2.解答#include<iostream>#include<cstdio>usingnamespacestd;intmain(){intmoney[6]={100,50,20,10,5,2};doublecoins[6]={1.0,0.50,0.25,0.10,0.05,0.01};......
  • HashMap的数组长度为何必须是2的n次方
    扩容方便,数字位移计算方便效率高;计算元素下标使用的方式是key的hash&(数组length-1),由于length是2^n,转换成二进制后2^-1最低位就全部都是1,比如111,就相当于是数组长度的掩码,那么hash&111就可以将数组的每一位都覆盖,加入数组长度不是2^n,那么length-1低位不全是1,比如101,那么h......
  • 最少步数
    在各种棋中,棋子的走法总是一定的,如中国象棋中马走“日”。有一位小学生就想如果马能有两种走法将增加其趣味性,因此,他规定马既能按“日”走,也能如象一样走“田”字。他的同桌平时喜欢下围棋,知道这件事后觉得很有趣,就想试一试,在一个(100*100)的围棋盘上任选两点A、B,A点放上黑子,B点放上......
  • 剑指 Offer II 088. 爬楼梯的最少成本
    剑指OfferII088.爬楼梯的最少成本-力扣(LeetCode)分析:先思考建立状态。到达第i阶台阶时,花费最少体力为f[i]。再状态转移,到达i时有两种选择,从i-1或者i-2到i,两者取最小的再加上i需要花费的体力cost[i]。结果f[-1]最后得出状态转移:f[i]=min(f[i-1],f[i-1])+cost[i]......
  • [2022编思1062]找出最少动作数
    [2022编思1062]找出最少动作数题面有一个栈,这个栈有\(m\)个状态,每个状态记为\(S_i\)每个状态里面有\(n\)种数字,数字\(i\)有\(a_i\)个。考虑从全空,依次经历\(S_1...S_m\),让操作数最小化。sov是一个神奇的区间DP。考虑对于某个区间\(S_i...S_j\),从开始塞进去不用动的数字有\(......
  • AC.790 数的三次方根
    AC.790数的三次方根题目描述\(给定一个浮点数n,求它的三次方根。\)输入格式\(共一行,包含一个浮点数n。\)输出格式\(共一行,包含一个浮点数,表示问题的解。注意,结果保留6位小数。\)数据范围\(−10000≤n≤10000\)输入样例1000.00输出样例10.000000......
  • 最少拦截系统 1257 (动态规划)
    最少拦截系统TimeLimit:2000/1000MS(Java/Others)   MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):27022   AcceptedSubmission(s):10667ProblemDescription某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系......
  • 力扣---剑指 Offer 16. 数值的整数次方
    实现 pow(x, n) ,即计算x的n次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。 示例1:输入:x=2.00000,n=10输出:1024.00000示例2:输入:x=2.10000,n=3输出:9.26100示例3:输入:x=2.00000,n=-2输出:0.25000解释:2-2=1/22=1/4=0.25 提示:-100.0< x......
  • 2612. 最少翻转操作数
    题目链接:2612.最少翻转操作数方法:BFS+AVLTree解题思路先不考虑被\(ban\)的位置:假设当前\(1\)的位置在下标\(i\)上,那么将其按照包含\(i\)且长度为\(k\)的数组反转一次所能得到的对应下标的可能结果是一个从\(i-k+1\)起始到\(i+k-1\)结束的公差为\(2......
  • 2379. 得到 K 个黑块的最少涂色次数
    题目链接:2379.得到K个黑块的最少涂色次数方法一:前缀和解题思路通过前缀和计算任意子区间\([i,i+k-1]\)中字母\(W\)的数量,\(ans=min([i,i+k-1].count('W'),i=0,1,...)。\)代码classSolution{public:intminimumRecolors(stringblocks,intk......