1.5 Number Triangles

本文分享了一道经典的动态规划题目——数三角形的最大路径和问题。文章详细介绍了使用动态规划求解该问题的方法,并通过代码示例展示了具体的实现过程。作者还分享了在编码过程中的一些经验教训。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这题入门DP..因为以前写过了..所以搞起来很快

但是又卡在某些细节花了很些时间 

此次教训,再也不把max,min写成宏,比如这次很多地方需要把(max())像这样括起来..写成函数方便多!

提交的时候又忘记delete fropen的注释了.....悲剧

/*
id:y7276571
lang:c++
task:numtri
*/
/*
dp:f[i][j]=max{f[i+1][j], f[i+1][j+1]}(i >= 0 && j <= i)
*/
#include<iostream>
#include<cstdio>
#define max(x,y) x > y ? x : y
using namespace std;
const int maxn = 1000+1;
int main()
{
freopen("numtri.in", "r", stdin);
freopen("numtri.out", "w", stdout);
int n, numtri[maxn][maxn];
long maxsum = 0, f[maxn][maxn];
cin >> n;
for(int i = 0; i < n; i++)
for(int j = 0; j <= i; j++)
cin >> numtri[i][j];
for(int i = 0; i < n; i++) f[n-1][i] = numtri[n-1][i];
for(int i = n-2; i >= 0; i--)
for(int j = 0; j <= i; j++)
{
f[i][j] = (max(f[i+1][j],f[i+1][j+1]))+numtri[i][j];
if(maxsum < f[i][j]) maxsum = f[i][j];
// cout << maxsum << endl;
}
cout << maxsum << endl;
/*
for(int i = 0; i < n-1; i++)
{
for(int j = 0; j <= i; j++)
cout << f[i][j] << " ";
cout << endl;
}
*/
return 0;
}



转载于:https://www.cnblogs.com/shixuehunk/archive/2012/01/27/2330085.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值