add: 220205-CN
This commit is contained in:
parent
75dec4ff64
commit
fc704be306
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -3,4 +3,4 @@ PROJECT(2202)
|
|||
|
||||
SET(CMAKE_CXX_STANDARD 23)
|
||||
|
||||
ADD_EXECUTABLE(2202 220204-CN.cpp)
|
||||
ADD_EXECUTABLE(2202 220205-CN.cpp)
|
||||
|
|
|
|||
Loading…
Reference in New Issue