日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

硬币问题(瓜子网二手车试题)

發布時間:2024/3/12 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 硬币问题(瓜子网二手车试题) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

硬幣問題(瓜子網二手車試題)

有1分,2分,5分,10分四種硬幣,每種硬幣數量無限,給定n分錢(n <= 100000),有多少中組合可以組成n分錢?

我只知道使用多重for循環進行暴力求解,效率很低,數字高了后算不出來。

答案中提供了一個很巧妙的方法。但我看不懂。

幾經鉆研后,搞懂了。主要參考了這篇文章。

# python3 def change(coins, n):len1 = len(coins)if len1 == 0 and n < 1 or n > 100000:return Noneways = [0] * (n + 1) # 初始化ways[0] = 1for i in range(len1):for j in range(coins[i], n + 1):# 保證n小于等于100000,為了防止溢出,請將答案Mod 1000000007ways[j] = (ways[j] + ways[j - coins[i]]) % 1000000007print(ways[n])if __name__ == '__main__':coins, n = [1, 2, 5, 10], int(input())change(coins, n)

我們應該都還記得邁臺階問題。一次性可以邁1-2階,遞推關系如下。

F(N)=F(N-1)+F(N-2)

那么對于硬幣問題,也可以視為一次增加1,2,5,10級臺階,最終湊到n階就可了。

那么是否有:

F(N)=F(N-1)+F(N-2)+F(N-5)+F(10)呢?

當然不是。例如在N-5級臺階的時候,此時到N的方法顯然不止一種。甚至可以說是有多種的。因而,也應該要把F(6)等給算上。

因為可以選擇的情況太多了,導致上面這種簡單的遞推關系式就不成立了。

因而我們嘗試讓任何時候都只有兩個選擇。從簡單的兩種硬幣1,2開始。

此時顯然有:

F(N)=F(N-1)+F(N-2)

F(1)=1

如果只使用硬幣1

F(N)=F(N)+F1(N-1)

其中F1是使用當前所有類型的硬幣的數目。

如果同時使用2

F(N)=F(N)+F1(N-1)

+F2(N-2)

其中F1來自硬幣1,F2來自硬幣2

此時如果把硬幣5加上。

F(N)=F1(N)+F2(N-5)

每一個點N可以如此構成,只含1的方法個數,只含1,2的方法個數,125方法個數,12510方法個數。

對任何一個F(N)只含一的方法個數一定是1。

含有2的方法個數就是從第一個可以被2更新的點3,每個點F(N)+=F(N-1)

最終還是發現問題描述不清楚。。。該死的。算了。

總結

以上是生活随笔為你收集整理的硬币问题(瓜子网二手车试题)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。