leetcode 1301. 最大得分的路径数目
地址 https://leetcode-cn.com/problems/number-of-paths-with-max-score/
给你一个正方形字符数组 board ,你从数组最右下方的字符 'S' 出发。
你的目标是到达数组最左上角的字符 'E' ,数组剩余的部分为数字字符 1, 2, ..., 9 或者障碍 'X'。在每一步移动中,你可以向上、向左或者左上方移动,可以移动的前提是到达的格子没有障碍。
一条路径的 「得分」 定义为:路径上所有数字的和。
请你返回一个列表,包含两个整数:第一个整数是 「得分」 的最大值,第二个整数是得到最大得分的方案数,请把结果对 10^9 + 7 取余。
如果没有任何路径可以到达终点,请返回 [0, 0] 。
示例 : 输入:board = ["E23","2X2","12S"]
输出:[,]
示例 : 输入:board = ["E12","1X1","21S"]
输出:[,]
示例 : 输入:board = ["E11","XXX","11S"]
输出:[,]
提示: <= board.length == board[i].length <=
解答
使用动态规划 因为走到当前的格子肯定是当前格子的右方 下方和右下方。 那么他的右下方 右方和下方的状态中 那些是得分最高的就决定了当前的得分和走法方案数
代码如下 注意DP有额外多开一层 为了保持代码的一致性。
代码起点dp判断如下: n = board.size() ; dp[n-1][n-1] = max(max(dp[n][n-1], dp[n-1][n]), dp[n][n]);
由于dp初始均为0 所以不影响起点 dp[n-1][n-1]的取值
class Solution {
public:
vector<vector<int>> dp;
vector<vector<int>> path; vector<int> pathsWithMaxScore(vector<string>& board) {
const int n = board.size();
const int MOD = 1e9+;
dp.resize(n+, vector<int>(n+));
path.resize(n+,vector<int>(n+)); board[n - ][n - ] = '';
board[][] = ''; path[n - ][n - ] = ; for (int i = n - ; i >= ; i--) {
for (int j = n - ; j >= ; j--) {
if (board[i][j] == 'X') continue;
int m = max(max(dp[i + ][j], dp[i][j + ]), dp[i + ][j + ]);
dp[i][j] = ( (board[i][j] - '') + m ) %MOD; if (dp[i + ][j] == m) path[i][j] = ( path[i][j]+path[i+][j])%MOD;
if (dp[i + ][j+] == m) path[i][j] = (path[i][j] + path[i + ][j+]) %MOD ;
if (dp[i][j+] == m) path[i][j] = ( path[i][j]+ path[i][j+])%MOD;
}
}
if(path[][] == ) return vector<int>({,});
return vector<int>({dp[][],path[][]});
} };
leetcode 1301. 最大得分的路径数目的更多相关文章
- [LeetCode] 113. Path Sum II 路径和 II
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...
- [LeetCode] 437. Path Sum III 路径和 III
You are given a binary tree in which each node contains an integer value. Find the number of paths t ...
- [LeetCode] Binary Tree Paths 二叉树路径
Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree: 1 ...
- [LeetCode] Path Sum II 二叉树路径之和之二
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...
- [LeetCode] Path Sum 二叉树的路径和
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...
- [LeetCode] Minimum Path Sum 最小路径和
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...
- [LeetCode] Unique Paths 不同的路径
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...
- PAT甲题题解-1003. Emergency (25)-最短路径+路径数目
给出n个城市,m条边,起始点c1和目的点c2接下来给出n个城市的队伍数以及m条双向边问你求c1到c2的所有最短路径数目,以及其中经过的最多队伍数 先最短路dijkstra,同时建立vector数组pr ...
- LeetCode刷题笔记-递归-路径总和
题目描述: 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 su ...
随机推荐
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H Skiing【拓扑排序,关键路径】
2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H Skiing In this winter holiday, Bob has a plan for skiing at the moun ...
- keep-alive vue组件缓存避免多次加载相应的组件
keep-alive vue组件缓存避免多次加载相应的组件
- jQuery 无刷新评论
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Python学习(四)cPickle的用法
python中有两个类似的:pickle与cPickle:两者的关系:“cPickle – A faster pickle” pickle模块中的两个主要函数是dump()和load().dump() ...
- Shell 基本运算符 1
Shell 和其他编程语言一样,支持多种运算符,包括: 算术运算符 关系运算符 字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr ...
- day3_python之函数返回值、语句形式、表达式形式
一. 函数对象 1. 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二.返回值 return的返回值没有类型 ...
- uva 11174 Stand in a Line (排列组合)
UVa Online Judge 训练指南的题目. 题意是,给出n个人,以及一些关系,要求对这n个人构成一个排列,其中父亲必须排在儿子的前面.问一共有多少种方式. 做法是,对于每一个父节点,将它的儿子 ...
- [C#] ServiceStack.Redis如何批量的pop数据?
要安全的批量pop数据,有两个办法: 1.用事务(不用事务的话可能导致重复读.ServiceStack的pipeline是没有自带事务的.) 2.执行lua脚本 我这里提供用事务的实现方法: publ ...
- js随即数字random实现div点击更换背景色
需求:点击按钮随机给盒子换背景色 用到的知识点:Math.random Math.round 文章地址 https://www.cnblogs.com/sandraryan/ <!DOCT ...
- JS中数组声明
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...