题解:1216
这道题也是递推(排序算法我就不准备写了,单纯排序就太简单了,当然逆序对除外),基本思路:从最底一层开始算起,一直往上加,谁大谁就加谁,最后输出f【1】【1】,代码如下
include<iostream>
include<cstdio>
include<algorithm>
include<cstring>
using namespace std;
long long f[1001][1001];//long long数组,避免溢出
int main()
{
int n,i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
scanf("%lld",&f[i][j]);//输入三角形
for(i=n;i>=2;i--)//从最后一排开始递推
{
for(j=1;j<=i-1;j++)//从f【i】【1】一直推到f【i】【i-1】
{
if(f[i][j]>f[i][j+1]) f[i-1][j]+=f[i][j];//判断大小
else f[i-1][j]+=f[i][j+1];//同上
}
}
printf("%lld",f[1][1]);//最后输出
return 0;
}
我的QQ:784318034,目前已学习算法:高精度,排序,递推。如果有小伙伴不会做题了可以来跟我讨论(因为我也不一定做得出来。。。),并会在下一期文章发表题解