Python 在变革问题上传递重大论据

Python 在变革问题上传递重大论据,python,python-3.x,algorithm,dynamic-programming,Python,Python 3.x,Algorithm,Dynamic Programming,我对改变算法有问题 我的函数coin_change_解决方案适用于小数字。 例如,如果我们将[1,10,25]作为硬币传递,将32作为S(我们想要得到的零钱)传递,它将返回[10,10,10,1,1]。当我想传递更大的数字时,问题就出现了,因为我想对美分进行运算,而不是对美元进行运算,这样我就有了定点算术(这是必须的,因为以后对浮点算术进行运算不是个好主意) 因此,当我传递一个数组,其中所有面额以美分[1,5,10,25,501002005001000100005000]和50000为单位时,我

我对改变算法有问题
我的函数coin_change_解决方案适用于小数字。 例如,如果我们将[1,10,25]作为硬币传递,将32作为S(我们想要得到的零钱)传递,它将返回[10,10,10,1,1]。当我想传递更大的数字时,问题就出现了,因为我想对美分进行运算,而不是对美元进行运算,这样我就有了定点算术(这是必须的,因为以后对浮点算术进行运算不是个好主意)
因此,当我传递一个数组,其中所有面额以美分[1,5,10,25,501002005001000100005000]和50000为单位时,我的编译器停止,并且不显示任何结果

你知道我应该怎么做才能使算法具有高效率,并且可以用美分传递所有的名词吗

def硬币更换解决方案(硬币):
#创建一个S x N表格以备备忘
N=蓝(硬币)
sols=[[]对于范围内的n(n+1)]对于范围内的s(s+1)]
对于范围(0,n+1)内的n:
sols[0][n]。追加([])
#使用自底向上动态规划填充表格
对于范围(1,s+1)内的s:
对于范围(1,n+1)内的n:
无_last=sols[s][n-1]

if(coins[n-1]不是您的查询的解决方案,而是一个空间更小的更好的解决方案:

dp = [0] + [float('inf') for i in range(S)]
for i in range(1, S+1):
    for coin in coins:
        if i - coin >= 0:
            dp[i] = min(dp[i], dp[i-coin] + 1)
if dp[-1] == float('inf'):
    return -1
return dp[-1]
假设
dp[i]
是构成金额
S
的最少硬币数量,那么对于
coins
中的每一枚硬币,
dp[i]=min(dp[i-coin]+1)


时间复杂度是
O(amount*coins.length)
而空间复杂度是
O(amount)

看起来你正在生成每一种可能的方法来进行更改。你不需要这样做。
对于范围(1,s+1)内的s:
迭代次数是50000*12,现在运行代码,明天早上检查答案。