// 2024/08/07
//interviewer: Alisha
//interviewee: Ted
// LC 2115: https://leetcode.com/problems/find-all-possible-recipes-from-given-supplies/
//----------------------------------
//題目1講解:
//time: 11:10
ingredient : [["b", "c"]]
recepies : ["a"]
2
input: ["a"] [["b", "c"]]
b+c -> a
{strawberry, water} → strawberry juice = 1
{strawberry juice, sugar} → strawberry jam = 2
{strawberry jam, strawberry, cake, cream, chocolate} → strawberry cake
{powder, sugar, egg} → cake
{milk, egg} → cream
level: {strawberry:0, water :0 , strawberry juice:1, }
int x = dfs(cake)
strawberry cake 最複雜,ans is 3
(-> strawberry jam -> strawberry juice -> strawberry/water)
// 1. ----------------------------------
//time: 11:16
//作法講解:
unoreder_map: key: str, value: str
strawberry cake -> 3
strawberry jam -> 2
strawberry juice -> 1
water, strawberry -> 0
dfs strawberry cake max(2, 0, 1 0, 0) + 1
// code: 11:23 (11:28) - 12:00
```cpp=
int def findMaxElment(vector<vector<str>>& ingredient, vector<str>& recepies) {
unordered_map<str, vector<str>> recepe_table;
for (int i = 0; i < recepies.size(); i++) {
recepe_table[recepies[i]] = ingredient[i];
}
unordered_map<str, int> level;
function<void<int>> dfs = [&](str recepe) {
// check if recorded
queue<str> ingred;
for (str& re: recepe_table[recepe]) {
ingred.push_back(re);
}
int recepe_level = 0;
while (!ingred.empty()) {
str s = ingred.front();
ingred.pop();
if (level.find(s) != level.end()) {
recepe_level = max(recepe_level, level[s]);
} else {
}
}
}
int ans = 0;
for (str& recepe: recepies) {
ans = max(ans, dfs(recepe));
}
return ans;
}
```
//----------------------------------
//作法講解:
//time:
//----------------------------------
//作法講解:
//time:
// =======
// feed back
- circle?
- empty, intput type --> ✅
- 求助、思考時要說一下、安靜不知道卡在哪、掉線or not
- auto&
- 註解、邊打邊講
- top down dfs + record -> top down dp
- bottom up dp -> topology
// =======
// finish