**
航电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;
}
#总结
将之前的计算结果再次利用起来是动规