正在载入在线练习界面,本页内容可直接阅读…

AK CSP › NOIP 普及 2012 第一轮真题 › 第 25 题

NOIP 普及 2012 第一轮 第 25 题:递归求数字三角形的最大路径和

阅读程序 · 搜索与图遍历(DFS/BFS) · 答案 14

题目

```
#include <iostream>
using namespace std;
int n,i,j,a[100][100];
int solve(int x,int y)
{
	int u,v;
	if(x==n) return a[x][y];
	u=solve(x+1,y);
	v=solve(x+1,y+1);
	if(u>v) return a[x][y]+u;
	else return a[x][y]+v;	
}
int main()
{
	cin>>n;
	for(i=1;i<=n;i++)
		for(j=1;j<=i;j++) cin>>a[i][j];
	cout<<solve(1,1)<<endl;
	return 0;	
}
```
输入:   
```
5   
2   
-1 4   
2 -1 -2   
-1 6 4 0   
3 2 -1 5 8  
```

本小题

阅读程序写结果

答案

14

题解

考点定位

数字三角形的最大路径和。

解题过程

solve(x,y) 返回从 (x,y) 到底层的最大路径和,每步只能走到下一行同列或右侧相邻列。

自底向上计算“当前数+两个后继的较大值”:

行从各位置出发的最大路径和
53,2,-1,5,8
42,8,9,8
310,8,7
29,12
114

第二行第二项为 4+max(8,7)=12;顶点为 2+max(9,12)=14。一条最优路径是 2→4→−1→4→5,总和为 14。

答案:14。

易错提醒

每次只能比较相邻的两个后继。4+8=12,不能误算为 11;原卷与程序在本题没有答案冲突。

真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1 京公网安备11010502062986号