LeetCode 1463. 摘樱桃 II(dp)
题意:
给你一个 rows x cols 的矩阵 grid 来表示一块樱桃地。 grid 中每个格子的数字表示你能获得的樱桃数目。你有两个机器人帮你收集樱桃,机器人 1 从左上角格子 (0,0) 出发,机器人 2 从右上角格子 (0, cols-1) 出发。请你按照如下规则,返回两个机器人能收集的最多樱桃数目:从格子 (i,j) 出发,机器人可以移动到格子 (i+1, j-1),(i+1, j) 或者 (i+1, j+1) 。
当一个机器人经过某个格子时,它会把该格子内所有的樱桃都摘走,然后这个位置会变成空格子,即没有樱桃的格子。
当两个机器人同时到达同一个格子时,它们中只有一个可以摘到樱桃。
两个机器人在任意时刻都不能移动到 grid 外面。
两个机器人最后都要到达 grid 最底下一行。数据范围:
rows == grid.length
cols == grid[i].length
2 <= rows, cols <= 70
0 <= grid[i][j] <= 100
解法:
显然令d[i][j][k]表示第i行,机器人1在位置j,机器人在位置k能获得的最大值,
枚举机器人走的方向进行dp即可.
code:
int d[71][71][71];
class Solution {public:int cherryPickup(vector<vector<int>>& a) {memset(d,-1,sizeof d);int n=a.size();int m=a[0].size();d[0][0][m-1]=a[0][0]+a[0][m-1];for(int i=0;i<n-1;i++){for(int j=0;j<m;j++){for(int k=0;k<m;k++){//枚举当前状态d[i][j][k]if(d[i][j][k]==-1)continue;//状态不合法for(int d1=-1;d1<=1;d1++){for(int d2=-1;d2<=1;d2++){//枚举两个机器人走的方向int x1=j+d1;int x2=k+d2;if(x1<0||x1>=m||x2<0||x2>=m)continue;int temp=a[i+1][x1];if(x2!=x1)temp+=a[i+1][x2];d[i+1][x1][x2]=max(d[i+1][x1][x2],d[i][j][k]+temp);}}}}}int ans=0;for(int j=0;j<m;j++){for(int k=0;k<m;k++){ans=max(ans,d[n-1][j][k]);}}return ans;}
};
LeetCode 1463. 摘樱桃 II(dp)相关推荐
- LeetCode 741. 摘樱桃(dp)
题意: 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示:0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然后穿过它. ...
- 力扣1463——摘樱桃 II(多状态动态规划)
解题思路 机器人可以往左中右三个方向往下走,也即是每个位置可以由上一行的左中右三个位置转移来: 对于有两个机器人,也就是在每一行时机器人的位置有n×n种组合,那就把每种状态都记录下来: 对于当前行dp ...
- Leetcode 741. 摘樱桃 C++
Leetcode 741. 摘樱桃 题目 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一 ...
- 【LeetCode】摘樱桃 [H](记忆化搜索)
741. 摘樱桃 - 力扣(LeetCode) 一.题目 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示 ...
- LeetCode 741. 摘樱桃___贪心算法篇__失败
741. 摘樱桃 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然 ...
- LeetCode 741 摘樱桃(动态规划)
一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然后穿过它. -1 ...
- [leetcode]741摘樱桃,动态规划
题目表明去终点只能往下和往右,回去只能往上和往左,统计路程中经过的樱桃个数,那么就相当于从起点出发两次到终点,但两次路过到的同个樱桃就不能再重复计算,这两次不分先后,同时走深搜,然后用dp表示每个状态 ...
- 【数据结构与算法】之深入解析“摘樱桃II”的求解思路与算法示例
一.题目要求 给你一个 rows x cols 的矩阵 grid 来表示一块樱桃地,grid 中每个格子的数字表示你能获得的樱桃数目.你有两个机器人帮你收集樱桃,机器人 1 从左上角格子 (0,0) ...
- 【网格 dp】A002_LC_摘樱桃 I~II 传纸条(基于对角线定理(记忆化 / dp))
一.摘樱桃 I 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然后 ...
最新文章
- pandas 删除数据
- MIT自然语言处理第三讲:概率语言模型
- 微服务架构分布式事务解决方案设计思路-(概念篇)
- Beautifulsoup 网页表格的解析
- 背景图层和普通图层的区别_ps:图层有多少种类?我已经列出来了,学不学就看你自己了...
- python数据结构_(列表)大O性能_学习笔记(2)
- (转)漫画:什么是分布式事务?
- FindChildControl与FindComponent(动态创建的控件要通过Owner.FindComponent去找该控件)
- Windows Tips
- 操作系统原理实验(五) 内存管理
- yapi 权限_yapi接口管理平台手册
- 刺客信条奥德赛ce修改技能点_刺客信条奥德赛特长加点
- android仿钉钉日程日历,Flutter仿钉钉考勤日历的示例代码
- 7.camera驱动06-自己实现v4l2驱动-虚拟摄像头
- suse linux服务器的常用命令
- 2021年3月最新彩虹发卡网完整运营版+高仿优云宝模板
- TLE5012磁编码器使用记录
- SandForce SF2281主控SSD开卡案例
- 学校机房电脑前面的耳机插孔不可用
- 计算机工程硕士论文答辩,计算机学院工程硕士论文答辩须知20.doc
热门文章
- android高德地图线段的纹理,Android高德之旅(8)绘制线
- 维迪声E3—维尔晶科技的十年磨一剑
- Android 获取通讯录联系人,打开通讯录获取联系人信息;整个流程封装在基类中;
- JLX256160 iic 带字库
- 【非真实渲染】【卡通渲染技术点介绍】
- 星空cad批量打印smartbatchplotv5.2.0版本即将更新
- 北大计算机学院何浏源,【北大学子】与计量结缘 与学术偕行——访光华管理学院2013届博士毕业生常晋源...
- GBase 8c 函数和操作符 - HLL函数和操作符 之 聚合函数
- error lnk2001: mysql_LNK2001: 无法解析的外部符号的几种情况
- 一文带你熟透Java线程池的使用及源码