什麼是動態規劃?動態規劃典型例題求解+程式碼
class Solution { public: int maximalSquare(vector<vector<char>>& matrix) { int dim=0; int row=matrix.size(); if(row==0) return 0; int colum=matrix[0].size(); vector<vector<int> > status(row,vector<int>(colum,0)); for(int i=0;i<row;i++){ status[i][0]=matrix[i][0]-'0'; dim=dim<status[i][0]?status[i][0]:dim; } for(int i=0;i<colum;i++){ status[0][i]=matrix[0][i]-'0'; dim=dim<status[0][i]?status[0][i]:dim; } for(int i=1;i<row;i++) for(int j=1;j<colum;j++){ if(matrix[i][j]=='0') status[i][j]=0; else{ status[i][j]=min(status[i-1][j],status[i][j-1],status[i-1][j-1])+1; if(status[i][j]>dim) dim=status[i][j]; } } return dim*dim; } int min(int a,int b,int c) { int temp; temp=a<b?a:b; if(c<temp) temp=c; return temp; } };
昨天刷leetcode遇到一道題221. Maximal Square.
此題是一道典型的動態規劃可以解決的問題。
程式碼如下:
所以一個問題是該用遞推、貪心、搜尋還是動態規劃,完全是由這個問題本身階段間狀態的轉移方式決定的!
每個階段只有一個狀態->遞推;
每個階段的最優狀態都是由上一個階段的最優狀態得到的->貪心;
每個階段的最優狀態是由之前所有階段的狀態的組合得到的->搜尋;
每個階段的最優狀態可以從之前某個階段的某個或某些狀態直接得到而不管之前這個狀態是如何得到的->動態規劃。
作者:王勐
連結:https://www.zhihu.com/question/23995189/answer/35429905
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。 看完了上面關於動態規劃的概念講解,下面動手動腦看幾道例題: