蓝桥杯试题 算法训练 拿金币

Posted Alex_996

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯试题 算法训练 拿金币相关的知识,希望对你有一定的参考价值。

试题 算法训练 拿金币

Ideas

一道经典的动态规划的题目。

我们要求的是如何从最左上角走才能拿到最多的金币,并没有规定目的地,但是只能从一个格子走到它右边或下边的格子里,因此可以推出,最终肯定是在最下面一层的。

我们可以从下往上推,从最下面一层开始,逐层向上计算,得到最上面一层能够得到拿到的金币数。

Code

Python

if __name__ == '__main__':
	n = int(input())
	dp = [[0] * (n + 1) for _ in range(n + 1)]
	for i in range(n):
		for j, val in enumerate(map(int, input().split())):
			dp[i][j] = val
	
	# 状态转移,dp[i][j] 表示在第 i 行 j 列的格子能够拿到的最多金币数,dp[i][j] = grid[i][j] + max(dp[i][j + 1], dp[i + 1][j])
	for i in range(n - 1, -1, -1):
		for j in range(n - 1, -1, -1):
			dp[i][j] = dp[i][j] + max(dp[i][j + 1], dp[i + 1][j])
	
	print(dp[0][0])

以上是关于蓝桥杯试题 算法训练 拿金币的主要内容,如果未能解决你的问题,请参考以下文章

[蓝桥杯Python]算法练习算法基础算法训练算法模板(持续更新)

算法笔记_206:第五届蓝桥杯软件类决赛真题(Java语言A组)

(蓝桥杯)试题 算法训练 回形取数

(蓝桥杯)试题 算法训练 排列

(蓝桥杯)试题 算法训练 数的计数

(蓝桥杯)试题 算法训练 孪生素数