動態(tài)規(guī)劃逆序解法例題 動態(tài)規(guī)劃如何測試是否超時?
動態(tài)規(guī)劃如何測試是否超時?了解什么是動態(tài)編程以及何時使用它。設(shè)置存儲狀態(tài)轉(zhuǎn)換方程超級樓梯有兩種方法可以一次一步爬樓梯和一次兩步爬樓梯。有多少方法可以爬到第n步。讓狀態(tài)DP[i]為上i步的方法數(shù),DP[
動態(tài)規(guī)劃如何測試是否超時?
了解什么是動態(tài)編程以及何時使用它。
設(shè)置存儲狀態(tài)轉(zhuǎn)換方程
超級樓梯
有兩種方法可以一次一步爬樓梯和一次兩步爬樓梯。有多少方法可以爬到第n步。
讓狀態(tài)DP[i]為上i步的方法數(shù),DP[1]=1DP[2]=1
狀態(tài)轉(zhuǎn)移方程DP[i]=DP[i-1]DP[i-2]//上一步和兩步
用這個遞歸公式,我們不需要遞歸求解。(遞歸開銷很大
不同的路徑
DP[i][J]是單元格(i,J)的方法數(shù),DP[0][]=1DP[[0]=1
DP[i][J]=DP[i-1][J]DP[i][J-1]//向下和向右
]公共int唯一路徑(int m,int n){
]int[][
DP=New int[m][n
]for(int i=0 i< mi){
]for(int J)=0 J< N J){
]如果(I==0 | J==0)
DP[I][J]=1][否則{
DP[I][J]=DP[I-1][J]DP[I][J-1]}]}返回DP[M-1][N-1]}
高級:不同路徑=障礙物長度
int col=obstacleGrid[0].length
int[][]dp=new int[row][col
]if(obstacleGrid[0][0]==1){
返回0
}
對于(int i=0i<rowi){
對于(int j=0j<colj)