add: 220205-CN

This commit is contained in:
Lam Haoyin 2022-02-05 18:28:16 +08:00
parent 75dec4ff64
commit fc704be306
No known key found for this signature in database
GPG Key ID: 8C089CB1A2B7544F
2 changed files with 58 additions and 1 deletions

57
2202/220205-CN.cpp Normal file
View File

@ -0,0 +1,57 @@
#include <vector>
#include <iostream>
/**
* 1219. Path with Maximum Gold
* In a gold mine grid of size m x n, each cell in this mine has an integer representing the amount of gold in that cell, 0 if it is empty.
*
* Return the maximum amount of gold you can collect under the conditions:
* - Every time you are located in a cell you will collect all the gold in that cell.
* - From your position, you can walk one step to the left, right, up, or down.
* - You can't visit the same cell more than once.
* - Never visit a cell with 0 gold.
* - You can start and stop collecting gold from any position in the grid that has some gold.
*/
class Solution {
private:
static int dfs(const std::vector<std::vector<int>>& grid, int x, int y, bool* const vis) {
int ret = 0;
const auto m = grid.size(), n = grid.front().size();
vis[x * n + y] = true;
if (x > 0 && !vis[(x - 1) * n + y] && grid[x - 1][y]) {
ret = dfs(grid, x - 1, y, vis);
}
if (y > 0 && !vis[x * n + y - 1] && grid[x][y - 1]) {
ret = std::max(ret, dfs(grid, x, y - 1, vis));
}
if (x + 1 < m && !vis[(x + 1) * n + y] && grid[x + 1][y]) {
ret = std::max(ret, dfs(grid, x + 1, y, vis));
}
if (y + 1 < n && !vis[x * n + y + 1] && grid[x][y + 1]) {
ret = std::max(ret, dfs(grid, x, y + 1, vis));
}
vis[x * n + y] = false;
return ret + grid[x][y];
}
public:
static int getMaximumGold(const std::vector<std::vector<int>>& grid) {
auto m = grid.size(), n = grid.front().size();
bool* const vis = new bool[m * n]{};
int ret = 0;
for (decltype(m) i = 0; i < m; ++i) {
for (decltype(n) j = 0; j < n; ++j) {
if (grid[i][j]) {
ret = std::max(ret, dfs(grid, i, j, vis));
}
}
}
delete[] vis;
return ret;
}
};
int main() {
std::cout << Solution::getMaximumGold({{0,0,1},{1,1,0},{1,1,0}});
return 0;
}

View File

@ -3,4 +3,4 @@ PROJECT(2202)
SET(CMAKE_CXX_STANDARD 23) SET(CMAKE_CXX_STANDARD 23)
ADD_EXECUTABLE(2202 220204-CN.cpp) ADD_EXECUTABLE(2202 220205-CN.cpp)