你有三枚硬幣, 面值分別是a=[2,5,7] 每種硬幣足夠多,買一本書需要x=27元,如何用最少的硬幣組合正好付清,不需要對方找錢。
"""
1.確定狀態
假設最優解為k a1+a2+...+ak
1.1 最後一步:假設最優解為 27 - ak
1.2 子問題: 求27-ak最優解f(x) ---> [f[x-2] +1、 f[x-5] +1、 f[x-7] +1]
2. 轉移方程式:f(27) = min(f[25] +1, f[22] +1, f[20] +1)
3.初始條件 f(0) = 0
4.計算順序 0->27
"""def
test
(a, x)
:# 設定每個值得預設值為無窮大
f =[float
("inf"
)for i in
range
(x+1)]
# 設定初始值
f[0]
=0# 計算1到x每個值的最小步驟
for i in
range(1
, x+1)
:# 求解a中列舉的各種解決方案獲得最優解
for j in a:
if i >= j:
f[i]
=min
(f[i - j]+1
, f[i]
)print
(f[x]
)test([2
,5,7
],27)
力扣53. 給定乙個整數陣列 nums ,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。
示例:輸入: [-2,1,-3,4,-1,2,1,-5,4]
輸出: 6
解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。
"""
1 確定狀態:
最優解為以下標i為結束點的連續子陣列和最大
1.1 假設列表為nums, 最後乙個陣列下標為i, 最優解為函式f, 最後一步為求出最後乙個結束點的連續子陣列和最大
1.2 子問題求解f[i-1]的最優解
2 轉移方程式:
f[k] = max(a[k], f[k-1]+a[k])
3 初始條件:
f[0] = a[0]
4 計算順序
a[0] --> a[k]
"""class
solution
:def
maxsubarray
(self, nums: list[
int])-
>
int:
f =[float
("-inf"
)for _ in
range
(len
(nums))]
f[0]
= nums[0]
for i in
range(1
,len
(f))
: f[i]
=max
(nums[i]
, f[i-1]
+ nums[i]
) f.sort(
)return f[-1
]
簡化版本
class
solution
:def
maxsubarray
(self, nums: list[
int])-
>
int:
for i in
range(1
,len
(nums)):
nums[i]
=max
(nums[i]
, nums[i-1]
+ nums[i]
) nums.sort(
)return nums[-1
]
力扣300. 最長上公升子串行
給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。
示例:輸入: [10,9,2,5,3,7,101,18]
輸出: 4
解釋: 最長的上公升子串行是 [2,3,7,101],它的長度是 4。
class
solution
(object):
deflengthoflis
(self, nums)
:"""
:type nums: list[int]
:rtype: int
"""ifnot
len(nums)
:return
0 dp =[1
for _ in
range
(len
(nums))]
for i in
range(1
,len
(nums)):
for j in
range
(i):
if nums[i]
> nums[j]
: dp[i]
=max
(dp[i]
, dp[j]+1
)return
max(dp)
Python 動態規劃演算法
假設你是乙個小偷,背乙個可裝4磅東西的揹包。可盜竊的商品有如下3件 音響,4磅,價值3000美元 膝上型電腦,3磅,價值2000美元 吉他,1磅,價值1500美元 為了讓盜竊的商品價值最高,你該選擇哪些商品?演算法 第9章動態規劃 w 0,4,3,1 商品的重量列表,w 0 佔位用 p 0,3000...
動態規劃演算法
一 動態規劃演算法原理 將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後從這些子問題的解得到原問題的解 對於重複出現的子問題,只在第一次遇到的時候對它進行求解,並把答案儲存起來。了不去求解相同的子問題,引入乙個陣列,把所有子問題的解存於該陣列中,這就是動態規劃所採用的基本方法。動態規劃...
動態規劃演算法
動態規劃 通過把原問題分解為相對簡單的子問題來求解複雜問題。動態規劃常常適用於有重疊子問題和最優子結構性質的問題。演算法總體思想 演算法的基本步驟 演算法的基本要素 最優子結構 重疊子問題 備忘錄方法 問題描述 子串行 公共子串行 最長公共子串行 lcs 問題 問題分析 動態規劃求解lcs問題 最長...