Re: [闲聊] 每日LeetCode

楼主: JIWP (JIWP)   2024-02-11 17:42:39
1463 Cherry Pickup II
给一个2维矩阵grid,grid[i][j]代表这个格子的樱桃数量
有两个机器人会收集格子上的樱桃
当两个机器人走到同一格的时候,只有一个机器人可以拿grid[i][j]个樱桃,另一个拿0个
机器人一个是从左上角grid[0][0],另一个是从右上角grid[0][cols-1]
每次可以往左下、正下、右下走
请问机器人最多可以收集几个樱桃
思路:
建立一个3维dp矩阵
dp[i][j][k]代表第i列,机器人1拿j列,机器人2拿k列的最大数目
机器人1走到[i][j]有3种走法 [i-1][j-1]、[i-1][j]、[i-1][j+1]
同理机器人2走到[i][k]也有三种走法 [i-1][k-1]、[i-1][k]、[i-1][k+1]
这样总共9种组合
dp[i][j][k]=这9种组合最大的+grid[i][j]+grid[i][k]
最后返回dp[n-1]里最大的数字就好
Go code
var m int
func cherryPickup(grid [][]int) int {
n := len(grid)
m = len(grid[0])
dp1 := [70][70]int{}
dp2 := [70][70]int{}
dp1[0][m-1] = grid[0][0] + grid[0][m-1]
for i := 1; i < n; i++ {
for j := 0; j <=min(i,m-1); j++ { //j最大会到i但不能超过m
for k := m - 1; k >= max(m-1-i, 0); k
作者: SecondRun (雨夜琴声)   2024-02-11 17:49:00
到底谁过年还在刷题
作者: DJYOSHITAKA (Evans)   2024-02-11 17:52:00
你好猛
楼主: JIWP (JIWP)   2024-02-11 17:55:00
164p欸 好爽

Links booklink

Contact Us: admin [ a t ] ucptt.com