**
航电oj:The Triangle
**
#题目描述

#给你1个数n 再给你n层数 构成一个三角型 找到一条和最大的路 输出这个和的值 (可以从左下或右下两个方向走)
倒着看可能好理解一些 ,反方向 将数加回去 每个数的位置都要是求得的值的最大值 倒推倒最后 起点的位置上的值就所求值
#知识点
动态规划
#代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,temp1,temp2;//temp1,temp2 避免破坏原数据
int triangle[105][105];
int main()
{
scanf("%d",&n);
memset(triangle,0,sizeof(triangle));
for(int i=1;i<=n;i++)
{
for(int k=1;k<=i;k++)
{
scanf("%d",&triangle[i][k]);
}
}
for(int i=n;i>=1;i--)
{
for(int k=1;k<=i;k++)
{
temp1 = triangle[i+1][k] + triangle[i][k];//当前位置加左下的值
temp2 = triangle[i+1][k+1] + triangle[i][k];//当前位置加右下的值
if(temp1>temp2)//找大的用
triangle[i][k] = temp1;
else
triangle[i][k] = temp2;
}
}
printf("%d\n",triangle[1][1]);
return 0;
}
#总结
将之前的计算结果再次利用起来是动规
该博客介绍了如何使用动态规划解决寻找一个三角形中从左下或右下到顶点的最大路径和的问题。代码示例展示了如何遍历并更新矩阵以找到最大和,最终输出起点的最大路径和。
212

被折叠的 条评论
为什么被折叠?



