C/C++ 数字三角形

数字三角形 -递归算法

给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。

在这里插入图片描述

输入格式:
第一行输入N,1≤N≤100,表示有N行数据,第i行有i个元素。

输出格式:
要求输出最大和

输入样例:
在这里给出一组输入。例如:

 5
 7
 3   8
 8   1   0
 2   7   4   4
 4   5   2   6   5

输出样例:
在这里给出相应的输出。例如:

30

代码:

#include <bits/stdc++.h>
using namespace std;
int a[101][101];//储存个点的数值
int n;
int mx=0;//储存路径和的最大值
int def(int a[][101],int s,int h,int l)
{
    s+=a[h][l];
    if(h==n-1)//当行到达最底端时
    {
        if(s>mx)//比较路径和
            mx=s;
        return 0;
    }
    def(a,s,h+1,l);//递归到下一行的相同列下标处
    def(a,s,h+1,l+1);//递归到下一行的 列+1 下标处
    return 0;
}
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<i+1;j++)
        {
            cin>>a[i][j];
        }
    }
    def(a,0,0,0);//参数分别为:各点数组 路径和 行 列
    cout<<mx;
    return 0;
}

动态规划

#include<bits/stdc++.h>
 using namespace std;
 const int N=510;
 int f[N][N];//存储各数字
 int n;
 int main()
 {
     cin>>n;
     for(int i=1;i<=n;i++)
     {
         for(int j=1;j<=i;j++)
         {
             cin>>f[i][j];
         }
     }
     for(int i=n-1;i>=1;i--)
     {
         for(int j=i;j>=1;j--)//从下往上遍历
         {
             f[i][j]=max(f[i+1][j],f[i+1][j+1])+f[i][j];
         }
     }
     cout<<f[1][1]<<endl;
     return 0;
 }
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C/C++语言经典实用趣味程序设计编程百例精解C/C++语言经典实用趣味程序设计编程百例精解(1)1.绘制余弦曲线 2.绘制余弦曲线和直线 3.绘制圆 4.歌星大奖赛 5.求最大数 6.高次方数的尾数 7.阶乘尾数零的个数 8.借书方案知多少 9.杨辉三角形 10.数制转换 C/C++语言经典实用趣味程序设计编程百例精解(2)11.打鱼还是晒网 12.抓交通肇事犯 13.该存多少钱 14.怎样存钱利最大 15.捕鱼和分鱼 16.出售金鱼 17.平分七筐鱼 18.有限5位数 19.8除不尽的自然数 20.一个奇异的三位数C/C++语言经典实用趣味程序设计编程百例精解(3)21.4位反序数 22.求车速 23.由两个平方三位数获得三个平方二位数 24.阿姆斯特朗数 25.完全数 26.亲密数 27.自守数 28.回文数 29.求具有abcd=(ab+cd)2性质的四位数 30.求素数 C/C++语言经典实用趣味程序设计编程百例精解(4)31.歌德巴赫猜想 32.可逆素数 33.回文素数 34.要发就发 35.素数幻方 36.百钱百鸡问题 37.爱因斯坦的数学题 38.换分币 39.年龄几何 40.三色球问题C/C++语言经典实用趣味程序设计编程百例精解(5)41.马克思手稿中的数学题 42.最大公约数和最小公倍数 43.分数比较 44.分数之和 45.将真分数分解为埃及分数 46.列出真分数序列 47.计算分数的精确值 48.新娘和新郞 49.委派任务 50.谁在说谎 C/C++语言经典实用趣味程序设计编程百例精解(6)51.谁是窃贼 52.黑与白 53.迷语博士的难题(1) 54.迷语博士的难题(2) 55.哪个大夫哪天值班 56.区分旅客国籍 57.谁家孩子跑最慢 58.拉丁方阵 59.填表格 60.1~9分成1:2:3的三个3位数 C/C++语言经典实用趣味程序设计编程百例精解(7)61.1~9组成三个3位的平方数 62.由8个整数形成奇特的立方体 63.减式还原 64.乘式还原 65.乘式还原(2) 66.除式还原(1) 67.除式还原(2) 68.九位累进可除数 69.魔术师的猜牌术(1) 70.魔术师的猜牌术(2) C/C++语言经典实用趣味程序设计编程百例精解(8)71.约瑟夫问题 72.邮票组合 73.和数能表示1~23的5个正整数 74.可称1~40磅的4块砝码 75.10个小孩分糖果 76.小明买书 77.波松瓦酒的分酒趣题 78.求π的近似值 79.求π的近似值(2) 80.奇数平方的一个有趣性质 C/C++语言经典实用趣味程序设计编程百例精解(9)81.角谷猜想 82.四方定理 83.卡布列克常数 84.尼科彻斯定理 85.回文数的形成 86.自动发牌 87.黑白子交换 88.常胜将军 89.抢30 90.搬山游戏 C/C++语言经典实用趣味程序设计编程百例精解(10)91.人机猜数游戏 92.人机猜数游戏(2) 93.汉诺塔 94.兎子产子 95.将阿拉伯数字转换为罗马数字 96.选美比赛 97.满足特异条件的数列 98.八皇后问题 99.超长正整数的加法 100.数字移动

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值