数塔问题

先贴出运行结果:
这里写图片描述
C++代码:

#include <iostream>
#define N 50
using namespace std;
//a[.][.][0]存储原始数据
//a[.][.][1]存储存储动态规划过程
//a[.][.][2]存储最优化路径
int main()
{
    int a[N][N][3];
    cout<<"please input the number of rows:";
    int rnum;
    cin>>rnum;
    if (rnum<1)
    {
        cout<<"输入有误"<<endl;
        exit(1);
    }
    //初始化
    for (int i=0;i<rnum;++i)
    {
        cout<<"please input the "<<i+1<<" row."<<endl;
        for (int j=0;j<=i;++j)
        {
            cin >> a[i][j][0];
            a[i][j][1] = a[i][j][0];
            a[i][j][2] = 0;
        }
    }

    for (int i=rnum-2;i>=0;--i)
    {
        for (int j=0;j<=i;++j)
        {
            if (a[i+1][j][1] > a[i+1][j+1][1])
            {
                a[i][j][1] += a[i+1][j][1]; //加上左边的数
                a[i][j][2] = 0;  //左边的数大,向左走
            } 
            else
            {
                a[i][j][1] += a[i+1][j+1][1]; //加上右边的数
                a[i][j][2] = 1;  //右边的数大,向右走
            }
        }
    }
    cout<< "a[i][j][0]存储原始数据如下:"<<endl;
    for (int i=0;i<rnum;++i)
    {
        for (int j=0;j<=i;++j)
        {
            cout<< a[i][j][0]<<' ';
        }
        cout<<endl;
    }
    cout<< "a[i][j][1]存储动态规划过程如下:"<<endl;
    for (int i=0;i<rnum;++i)
    {
        for (int j=0;j<=i;++j)
        {
            cout<< a[i][j][1]<<' ';
        }
        cout<<endl;
    }
    cout<< "a[i][j][2]存储最优解路径如下:"<<endl;
    for (int i=0;i<rnum;++i)
    {
        for (int j=0;j<=i;++j)
        {
            cout<< a[i][j][2]<<' ';
        }
        cout<<endl;
    }
    cout<<"max = "<<a[0][0][1]<<endl;
    int col = 0;
    cout<<"路径:"<<endl;
    for (int i=0;i<rnum-1;++i)
    {
        cout<<a[i][col][0]<<"->";
        col += a[i][col][2];
    }
    cout<<a[rnum-1][col][0]<<endl;
    return 0;
}

// 9
// 12 15
// 10 6 8
// 2 18 9 5
// 19 7 10 4 16
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值