题解: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,目前已学习算法:高精度,排序,递推。如果有小伙伴不会做题了可以来跟我讨论(因为我也不一定做得出来。。。),并会在下一期文章发表题解

posted @ 2017-12-22 18:03  最爱丁珰  阅读(20)  评论(0编辑  收藏  举报