题意:

给你一个 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)相关推荐

  1. LeetCode 741. 摘樱桃(dp)

    题意: 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示:0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然后穿过它. ...

  2. 力扣1463——摘樱桃 II(多状态动态规划)

    解题思路 机器人可以往左中右三个方向往下走,也即是每个位置可以由上一行的左中右三个位置转移来: 对于有两个机器人,也就是在每一行时机器人的位置有n×n种组合,那就把每种状态都记录下来: 对于当前行dp ...

  3. Leetcode 741. 摘樱桃 C++

    Leetcode 741. 摘樱桃 题目 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一 ...

  4. 【LeetCode】摘樱桃 [H](记忆化搜索)

    741. 摘樱桃 - 力扣(LeetCode) 一.题目 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示 ...

  5. LeetCode 741. 摘樱桃___贪心算法篇__失败

    741. 摘樱桃 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然 ...

  6. LeetCode 741 摘樱桃(动态规划)

    一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然后穿过它. -1 ...

  7. [leetcode]741摘樱桃,动态规划

    题目表明去终点只能往下和往右,回去只能往上和往左,统计路程中经过的樱桃个数,那么就相当于从起点出发两次到终点,但两次路过到的同个樱桃就不能再重复计算,这两次不分先后,同时走深搜,然后用dp表示每个状态 ...

  8. 【数据结构与算法】之深入解析“摘樱桃II”的求解思路与算法示例

    一.题目要求 给你一个 rows x cols 的矩阵 grid 来表示一块樱桃地,grid 中每个格子的数字表示你能获得的樱桃数目.你有两个机器人帮你收集樱桃,机器人 1 从左上角格子 (0,0) ...

  9. 【网格 dp】A002_LC_摘樱桃 I~II 传纸条(基于对角线定理(记忆化 / dp))

    一.摘樱桃 I 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然后 ...

最新文章

  1. pandas 删除数据
  2. MIT自然语言处理第三讲:概率语言模型
  3. 微服务架构分布式事务解决方案设计思路-(概念篇)
  4. Beautifulsoup 网页表格的解析
  5. 背景图层和普通图层的区别_ps:图层有多少种类?我已经列出来了,学不学就看你自己了...
  6. python数据结构_(列表)大O性能_学习笔记(2)
  7. (转)漫画:什么是分布式事务?
  8. FindChildControl与FindComponent(动态创建的控件要通过Owner.FindComponent去找该控件)
  9. Windows Tips
  10. 操作系统原理实验(五) 内存管理
  11. yapi 权限_yapi接口管理平台手册
  12. 刺客信条奥德赛ce修改技能点_刺客信条奥德赛特长加点
  13. android仿钉钉日程日历,Flutter仿钉钉考勤日历的示例代码
  14. 7.camera驱动06-自己实现v4l2驱动-虚拟摄像头
  15. suse linux服务器的常用命令
  16. 2021年3月最新彩虹发卡网完整运营版+高仿优云宝模板
  17. TLE5012磁编码器使用记录
  18. SandForce SF2281主控SSD开卡案例
  19. 学校机房电脑前面的耳机插孔不可用
  20. 计算机工程硕士论文答辩,计算机学院工程硕士论文答辩须知20.doc

热门文章

  1. android高德地图线段的纹理,Android高德之旅(8)绘制线
  2. 维迪声E3—维尔晶科技的十年磨一剑
  3. Android 获取通讯录联系人,打开通讯录获取联系人信息;整个流程封装在基类中;
  4. JLX256160 iic 带字库
  5. 【非真实渲染】【卡通渲染技术点介绍】
  6. 星空cad批量打印smartbatchplotv5.2.0版本即将更新
  7. 北大计算机学院何浏源,【北大学子】与计量结缘 与学术偕行——访光华管理学院2013届博士毕业生常晋源...
  8. GBase 8c 函数和操作符 - HLL函数和操作符 之 聚合函数
  9. error lnk2001: mysql_LNK2001: 无法解析的外部符号的几种情况
  10. 一文带你熟透Java线程池的使用及源码