一道例題解決記憶化搜尋(若干疑問)

2021-09-24 14:54:12 字數 905 閱讀 7353

附上**:

#include

using namespace std;

int n,m;

int f[1001][1001];

int f1[1001][1001];

int vis[1001][1001];

int dfs(int x,int y)

for(i=0; i第一點:

f1[x][y]=max(f1[x][y],b) 這是把值儲存起來,之後可以直接使用。就是以x,y為原點,下次f(x,y)會往四個方向走,取四個方向最長的長度,四個中的最大值儲存起來,下次搜尋的時候直接使用。

第二點:

我剛開始以為他會回溯,所以是這樣搞的,避免他會回溯到原來的點。

加了乙個vis[i][j]條件,防止他回溯。

另外說一點:

分別在每乙個dfs函式前面加上乙個vis[x][y]=1 dfs函式後面加上乙個vis[x][y]=0

這兩種是不同的。

第一種與第二種的區別是:

第一種只有原點的四個方向的分支都結束的時候,原點的標記才能被取消。第二種是只要乙個方向的結束,標記就取消了。

後面我取消了這種標記 因為不用標記 也不會回溯到以前,因為if(f[x][y]>f[x-1][y]) 只有原點大於另外乙個方向的值時候 才會呼叫函式。既然是大於,說明另乙個方向不會回溯到原點,因為他必然小於,所以不會呼叫函式。

JS的一道this例題解析

在學習js裡this的指向時,發現了一道有點 的面試題,看懂了對學習this應該是挺有幫助的 例題如下 function parent this.show function function child child.prototype new parent var parent new parent...

KM演算法及一道例題

這道題乍一看沒有什麼性質,但是我們眾所周知也很容易推出來的有乙個性質 這種矩陣的每一項a i j 是可以表示成a i b j 的 也就是說我們可以構建乙個二分圖 對於a i j 左邊的點i向右邊的點j建一條權值為a i j 的邊 我們現在的要求是對於每 一條邊,要求它兩邊的點權必須加起來大於等於邊權...

一道基礎例題的思考

上面是一段我自己編寫的 具體問題是寫出console.log的值,其中我的下意識的判斷 console.log a.constructor b true理由是b.prototype.contructor重寫了a.prototype物件contructor屬性,執行以上 執行結果證明我的下意思判斷是錯...