freedom.9
Senior Member
Cho cảnh sát soi mới tiến bộ nhanh đượclộ profile đi đâu cũng bị soi, khổ thật,![]()
via theNEXTvoz for iPhone
Cho cảnh sát soi mới tiến bộ nhanh đượclộ profile đi đâu cũng bị soi, khổ thật,![]()
Giờ mới nhận chắc năm nay skip mấy bài rồi, phạtXem tệp đính kèm 2752140
Nhận badge nào anh em :>
Thớt này có @Cố Trường Ca làm logistic vô cày mấy tháng, spam khí thế xong kiếm đc job ngon lặn mất tăm ko phát card cho ae gì cảbác này mình cũng soi solution tìm profile, xong quay qua thớt contest thấy tự ghi profile ngay page 1 =]] .
btw, nhờ thớt này mà em đã nâng đc privileges, giờ viết bài vào room Tuyển dụng & Tìm việc đc rồi, thanks các bác.
ơ sao toy chưa thấy nhỉ fency ơi
Tưởng mai fen streak 6 700 ngày rồi, thế này thì hỏng hếtơ sao toy chưa thấy nhỉ fency ơinăm nay bỏ chắc có vài ngày ah![]()
![]()
2 tháng kia mất mấy ngày ăn chơi sa đoạ quá
tháng 11 năm ngoái vẫn chưa biết sliding window là gì. nhờ các khóa học của @billy_don, bác phi đôm, bác a nô mà h e đã tự tin reverse linked list = 3 cách khác nhau 
Em bỏ 2 ngày Tết bễ quá khum làm được anh ạ
)sau tết mới bắt đầu làm nên chưa đủtháng 11 năm ngoái vẫn chưa biết sliding window là gì. nhờ các khóa học của @billy_don, bác phi đôm, bác a nô mà h e đã tự tin reverse linked list = 3 cách khác nhau
![]()
tính ra reverse linked list khó phết nếu mới tiếp xúc linked listThớt này có @Cố Trường Ca làm logistic vô cày mấy tháng, spam khí thế xong kiếm đc job ngon lặn mất tăm ko phát card cho ae gì cả![]()
![]()
via theNEXTvoz for iPhone
job ngon thì đã phát r, ai im im như @freedom.9 đâuclass Solution:
def maxMoves(self, grid: List[List[int]]) -> int:
m = len(grid)
n = len(grid[0])
directions = [[-1, 1], [0, 1], [1, 1]]
@lru_cache(None)
def dfs(r, c):
moves = 0
for dx, dy in directions:
nx = dx + r
ny = dy + c
if 0 <= nx < m and 0 <= ny < n and grid[nx][ny] > grid[r][c]:
moves = max(moves, 1 + dfs(nx, ny))
return moves
ans = 0
for i in range(m):
ans = max(ans, dfs(i, 0))
return ans
class Solution:
def maxMoves(self, grid: List[List[int]]) -> int:
m = len(grid)
n = len(grid[0])
print(n, m)
dp = [ [0 for _ in range(n)] for _ in range(m)]
result = 1
for i in range(m):
dp[i][0] = 1
for j in range(1, n):
for i in range(m):
if i >= 1 and grid[i][j] > grid[i-1][j-1] and dp[i-1][j-1]:
dp[i][j] = max(dp[i][j], dp[i-1][j-1] + 1)
if grid[i][j] > grid[i][j-1] and dp[i][j-1]:
dp[i][j] = max(dp[i][j], dp[i][j-1] + 1)
if i + 1 < m and grid[i][j] > grid[i+1][j-1] and dp[i+1][j-1]:
dp[i][j] = max(dp[i][j], dp[i+1][j-1] + 1)
result = max(result, dp[i][j])
return result - 1
class Solution {
public:
int maxMoves(vector<vector<int>>& grid) {
int m = grid.size(), n = grid[0].size();
vector<vector<int>> dp(m, vector<int>(n, INT_MIN));
int ans = 0;
for (int j = 0; j < n; j++) {
for (int i = 0; i < m; i++) {
if (j == 0) dp[i][j] = 0;
if (i - 1 >= 0 && j - 1 >= 0 && grid[i][j] > grid[i-1][j-1]) {
dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + 1);
}
if (j - 1 >= 0 && grid[i][j] > grid[i][j-1]) {
dp[i][j] = max(dp[i][j], dp[i][j - 1] + 1);
}
if (i + 1 < m && j - 1 >= 0 && grid[i][j] > grid[i+1][j-1]) {
dp[i][j] = max(dp[i][j], dp[i + 1][j - 1] + 1);
}
ans = max(ans, dp[i][j]);
}
}
return ans;
}
};
class Solution:
def maxMoves(self, grid: List[List[int]]) -> int:
m, n = len(grid), len(grid[0])
dp = [[0] * (n) for _ in range(m)]
for i in range(m):
dp[i][0] = 1
result = 0
for j in range(1, n):
for i in range(m):
if i > 0 and grid[i][j] > grid[i-1][j - 1] and dp[i-1][j-1] > 0 and dp[i][j] < dp[i-1][j-1] + 1:
dp[i][j] = dp[i-1][j-1] + 1
if grid[i][j] > grid[i][j - 1] and dp[i][j-1] > 0 and dp[i][j] < dp[i][j-1] + 1:
dp[i][j] = dp[i][j-1] + 1
if i + 1 < m and grid[i][j] > grid[i+1][j - 1] and dp[i+1][j-1] > 0 and dp[i][j] < dp[i+1][j-1] + 1:
dp[i][j] = dp[i+1][j-1] + 1
result = max(result, dp[i][j] - 1)
return result
class Solution {
public:
int maxMoves(vector<vector<int>>& grid) {
int m = grid.size(), n = grid[0].size(), ans = 0;
vector<vector<int>> dp(m, vector<int>(n, -1));
for(int i = 0; i < m; i++) dp[i][0] = 0;
for(int j = 1; j < n; j++) {
for(int i = 0; i < m; i++) {
if(i > 0 && dp[i-1][j-1] != -1 && grid[i][j] > grid[i-1][j-1]) {
dp[i][j] = max(dp[i][j], dp[i-1][j-1] + 1);
}
if(dp[i][j-1] != -1 && grid[i][j] > grid[i][j-1]) {
dp[i][j] = max(dp[i][j], dp[i][j-1] + 1);
}
if(i+1 < m && dp[i+1][j-1] != -1 && grid[i][j] > grid[i+1][j-1]) {
dp[i][j] = max(dp[i][j], dp[i+1][j-1] + 1);
}
ans = max(ans, dp[i][j]);
}
}
return ans;
}
};
class Solution:
def maxMoves(self, grid: List[List[int]]) -> int:
moves = [-1, 0, 1]
h, w = len(grid), len(grid[0])
def dfs(i, j, grid, dp):
if dp[i][j] != -1:
return dp[i][j]
max_move = 0
for move in moves:
ii, jj = i + move, j + 1
if 0 <= ii < h and jj < w and grid[ii][jj] > grid[i][j]:
max_move = max(max_move, 1 + dfs(ii, jj, grid, dp))
dp[i][j] = max_move
return dp[i][j]
dp = [[-1] * w for _ in range(h)]
max_move = 0
for i in range(h):
max_move = max(max_move, dfs(i, 0, grid, dp))
return max_move
dùng mảng directions code clean hơn hẳnPython:class Solution: def maxMoves(self, grid: List[List[int]]) -> int: m = len(grid) n = len(grid[0]) directions = [[-1, 1], [0, 1], [1, 1]] @lru_cache(None) def dfs(r, c): moves = 0 for dx, dy in directions: nx = dx + r ny = dy + c if 0 <= nx < m and 0 <= ny < n and grid[nx][ny] > grid[r][c]: moves = max(moves, 1 + dfs(nx, ny)) return moves ans = 0 for i in range(m): ans = max(ans, dfs(i, 0)) return ans

class Solution {
public int maxMoves(int[][] grid) {
int m = grid.length;
int n = grid[0].length;
int[][] move = new int[m][n];
for (int i = 0; i < m; i++) {
move[i][0] = 0;
}
int res = 0;
for (int j = 1; j < n; j++) {
for (int i = 0; i < m; i++) {
if(move[i][j-1] >=0 && grid[i][j]> grid[i][j-1])
{
move[i][j] = move[i][j-1]+1;
res= Math.max(res,move[i][j]);
continue;
}
if(i>0){
if(move[i-1][j-1] >=0 && grid[i][j]> grid[i-1][j-1]){
move[i][j] = move[i-1][j-1]+1;
res= Math.max(res,move[i][j]);
continue;
}
}
if(i<m-1){
if(move[i+1][j-1] >=0 && grid[i][j]> grid[i+1][j-1])
{
move[i][j] = move[i+1][j-1]+1;
res= Math.max(res,move[i][j]);
continue;
}
}
move[i][j]=-1;
}
}
return res;
}
}


