【SCU-1114】解题报告(DP,路径,DFS)
原始题目
下图是个数字三角,请编写一个程序计算从顶部至底部某处一条路径,使得该路径所经过的数字总和最大。
7
3 8
8 1 0
2 7 4 4
每一步可沿左斜线向下或右斜线向下走;
1≤三角形行数≤100
三角形中的数字为整数 0,1,……,99。
如果有多种情况结果都最大,任意输出一种即可。
输入:
第一行一个整数N,代表三角形的行数。
接下来N行,描述了一个数字三角。
输出:
第一行一个整数,代表路径所经过底数字总和。
第二行N个数,代表所经过的数字。
样例:
输入:
4
7
3 8
8 1 0
2 7 4 4
输出:
25
7 3 8 7
解题思路
入门dp,状态转移方程为dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+a[i][j]; dp[i][j]表示i行j列(即第i行j个数字到底部的最大和)。根据该状态转移方程递归实现即可。
本题不仅需要记录最终的和,还需要记录路径,这时候就需要根据dp的表再用dfs走一遍。
解题代码
1 |
|
收获与反思
开始在怎么寻找路径这里卡住了,学到的东西得反复看啊。。不然真的不会用。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!