[USACO1.5] [IOI1994]数字三角形 Number Triangles 解题思路及代码

先贴个题:

以及题目链接:P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)icon-default.png?t=N7T8https://www.luogu.com.cn/problem/P1216 

然后是我的代码:

#include<iostream>
#include<cstring>
#define MAX 1010
using namespace std;
int map[MAX][MAX],sumlist[MAX][MAX];	//储存金字塔数据和计算结果 
int r;
int dp(int i,int j)
{
	if(sumlist[i][j]!=-1)	//如果这个点的最大值已被算过,则直接返回,不再计算 
		return sumlist[i][j];
	if(i==r-1)	//如果是金字塔最后一层,最大值就是本身的值 
		sumlist[i][j]=map[i][j];
	else{
		int x=dp(i+1,j);	
		int y=dp(i+1,j+1);
		sumlist[i][j]=max(x,y)+map[i][j];	//递归逐层往上 
	} 
	return sumlist[i][j];	// 返回该点的累计最大值 
	
}
int main()
{
	cin>>r;
	memset(map,0,sizeof(map));	  //初始化金字塔数据
	memset(sumlist,-1,sizeof(sumlist)) ;	//初始化计算结果 
	for(int i=0;i<r;++i)	//输入金字塔数据
		for(int j=0;j<=i;++j)
			cin>>map[i][j];
	cout<<dp(0,0);
	return 0;
}

总结下:简单的模板题,这题太经典了,没啥特别好说的,注意下递归的终止条件就好。

by————2023.11.17刷题记录 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值