每日演算法 day 24

2022-02-13 23:48:58 字數 2065 閱讀 7403

那些你早出晚歸付出的刻苦努力,你不想訓練,當你覺的太累了但還是要咬牙堅持的時候,那就是在追逐夢想,不要在意終點有什麼,要享受路途的過程,或許你不能成就夢想,但一定會有更偉大的事情隨之而來。 mamba out~

2020.3.9

假設資料 tank = 5

n = 3

v : 3 4 2

n\v123

4510

-1-1-15

2-12-1

-1430

2-1-12

4000

-10從搜尋的角度去考慮動態規劃問題

每個物品只有選和不選兩種可能

不合理的分支將會被減去 故上表出現很多 -1

存在已經算過的問題比如 dfs(2 , 5) 會用到 dfs(4 , 3) ,而dfs(3,5) 也會用到 dfs(4 , 3) 我們可以將第一次進入dfs(4 , 3)的時候將該狀態記錄下來,從而達到優化搜尋的目的。

這就是動態規劃問題的一種思考方式 記憶化搜尋

記憶化搜尋版本

#include #include #include using namespace std;

const int n = 20005;

const int m = 35;

int f[m][n] , n , v[n] , tank;

int dfs(int now,int space)

int f1 = -999,f2 = -999;

f1 = dfs(now + 1,space); // 表示當前物品不選

if(space >= v[now]) // 表示可以選

return f[now][space] = max(f1,f2);

}int main()

cout << tank - dfs(1,tank);

return 0;

}

遞推版本遞推式動態規劃的另外一種主要形式

#include #include #include using namespace std;

const int n = 20005;

const int m = 35;

int f[m][n] , n , v[m] , tank;

int main()

else

} } cout << tank - f[n][tank];

return 0;

}

dp動規

#include #include #include using namespace std;

const int n = 1010;

int a[n][n] ,r , f[n][n];

int main()

} int ans = 0;

for(int i = 1;i <= r ;i ++) }

cout << ans << endl;

return 0;

}

記憶化搜尋版

#include #include #include using namespace std;

const int n = 1010;

int a[n][n], f[n][n] , r;

int dfs(int i ,int j)

int l = dfs(i + 1, j);

int r = dfs(i + 1, j + 1);

return f[i][j] = max(l,r) + a[i][j];

}int main()

}

cout << dfs(1,1) << endl;

return 0;

}

執行緒狀態 Day24

執行緒狀態概述 timed waiting在api中的描述為 乙個正在限時等待另乙個執行緒執行乙個 喚醒 動作的執行緒處於這一狀態 在我們寫賣票的案例中,為了減少執行緒執行太快,現象不明顯等問題,我們在run方法中新增了sleep語句,這樣就 強制當前正在執行的執行緒休眠 暫停執行 以 減慢執行緒 ...

day24 學習總結

構造方法 date d new date string類和date類的轉換,通過dateformat類來實現轉換 dateformat為抽象類,需要通過其具體的子類來建立物件 dateformat類 構造方法 public dateformat 無參構造 public dateformat stri...

day24 物件導向基礎

要理解物件導向,我們首先要知道什麼是面向過程 面向過程 面向過程重點在過程兩個字,神馬是過程,這還要解釋嗎?我還是說下吧,過程就是一條線,乙個步驟跟著乙個步驟,更生動點的說就是像工廠裡面的流水線一樣。它的優點是很明顯的,乙個流程乙個流程的走,對於一些不需要太多修改的程式很簡單,它能把複雜的問題簡單化...