tags:
大家覺得寫還可以,可以點讚、收藏、關注一下吧!
也可以到我的個人部落格參觀一下,估計近幾年都會一直更新!和我做個朋友吧!
計數型-機械人
存在型-青蛙跳石子
機械人2(座標型)
leetcode256-粉刷房子(序列型)
decode ways
確定狀態
確定轉移方程
初始條件和邊界情況
計算順序
你有三種硬幣,分別面值2元,5元和7元,每種硬幣都有足夠多,買一本書需要27元,如何用最少的硬幣組合正好付清,不需要對方找錢
// a: m:27
public
intcoinchange
(int
a,int m)
for(j=
0;j}}}if
(f[m]
==integer.max_value)
return f[m]
;}
給定m行n列的網格,有乙個機械人從左上角(0,0)出發,每一步可以向下或者向右走一步,問有多少種不同的方式走到右下角(m-1,n-1)
public
intuniquepaths
(int m,
int n)
}}
有n塊石頭分別在x軸的0,1,。。。,n-1位置.乙隻青蛙在石頭0,像跳到石頭n-1。如果青蛙在第i塊石頭上,他最多可以向右跳距離ai。問青蛙能否跳到石頭n-1
input:a=[2,3,1,1,4]
output:true
input:a=[3,2,1,0,4]
output:false
public
boolean
canjump
(int
a)}}
return f[n-1]
;}
乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?
public
intuniquepathswithobstacles
(int
a)int n = a[0]
.length;
if(n==0)
int[
] f =
newint
[m][n]
;int i,j;
for(i=
0;i)//top-left
if(i==
0&&j==0)
f[i]
[j]=0;
//若不為第一行
if(i>0)
//若不為第一列
if(j>0)
//若兩個條件都成立,則為f[i][j]=f[i-1][j]+f[i][j-1];}}
return f[m-1]
[n-1];
}
假如有一排房子,共 n 個,每個房子可以被粉刷成紅色、藍色或者綠色這三種顏色中的一種,你需要粉刷所有的房子並且使其相鄰的兩個房子顏色不能相同。
當然,因為市場上不同顏色油漆的**不同,所以房子粉刷成不同顏色的花費成本也是不同的。每個房子粉刷成不同顏色的花費是以乙個 n x 3 的矩陣來表示的。
例如,costs[0][0]
表示第 0 號房子粉刷成紅色的成本花費;costs[1][2]
表示第 1 號房子粉刷成綠色的花費,以此類推。請你計算出粉刷完所有房子最少的花費成本。
所有花費均為正整數。
輸入: [[17,2,17],[16,16,5],[14,3,19]]
輸出: 10
解釋: 將 0 號房子粉刷成藍色,1 號房子粉刷成綠色,2 號房子粉刷成藍色。
最少花費: 2 + 5 + 3 = 10。
確定狀態:
**子問題:**設油漆前i棟房子並且房子i-1是紅色、藍色、綠色的最小花費分別為f[i][0]、f[i][1]、f[i][2]
轉移方程:
public
intmincost
(int
c)//sequence type dp
int[
] f =
newint
[n+1][
3]; f[0]
[0]+f[0]
[1]+f[0]
[2]=
0;int i,j,k;
for(i=
1;i<=n;i++)}
}return math.
min(f[n][0
],math.
min(f[n][1
],f[n][2
]));
}}
有一段由a-z組成的字母串資訊被加密成數字串,加密方式為:a->1,b->2,… ,z->26,給定加密後的數字串s[0…n-1],問有多少種方式解密成字母串
input
12output
2(ab or l)
狀態:設數字串s前i個數字解密成字母串有f[i]種方式
轉移方程:設數字串s前i個數字解密成字母串有f[i]種方式
f[i] = f[i-1]|s[i-1]對應乙個字母 + f[i-2]|s[i-2]s[i-1]對應乙個字母
public
intnumdecodings
(string ss)
//check whether i>1
if(i>1)
}}return f[n]
;}
2023年7月9日更
大家覺得寫還可以,可以點讚、收藏、關注一下吧!
也可以到我的個人部落格參觀一下,估計近幾年都會一直更新!和我做個朋友吧!
動態規劃 九章演算法
最近看了九章演算法的動態規劃班,受益匪淺,一點簡要的筆記分享給大家 什麼是動態規劃?簡而言之,就是計算並儲存小問題的解,並將這些解組合成大問題的解。動態規劃題目的特點 1 計數 1 有多少種方式走到右下角 2 有多少種方法選出k個數使得和為sum 2 求最大值最小值 1 從左上角到右下角路徑的最大數...
演算法筆記 動態規劃1
動態規劃適合求解最優問題,比如最大值最小值等。它可以顯著的降低時間複雜度,提高 的執行效率。0 1 揹包問題 在上篇總結中,用回溯演算法解決了 0 1揹包問題。但是,在求解的過程中,我們應該能想象的出,有些步驟是一直在重複執行。如果揹包的總載重為 9 物品個數為 5 質量分別為 2,2,4,6,3 ...
演算法筆記 動態規劃 1
求解方法 標準的01揹包問題是指,有n int型 個物品和最多裝重量w int型 的揹包。weight陣列表示物品的重量,即weight i 表示第i個物品的重量 value陣列表示物品的價值,即value i 表示第i個物品的價值。問把哪些物品裝入揹包使得物品價值總和最大,每個物品只能裝一次。舉例...