• 数字三角形


    喂,你都趴在地上
    半小时了,蚂蚁有
    那么好看吗?
           /
    STO . OPZ

    你瞧,它在前进的路上
    有很多种选择,它不知
    道哪条路上有食物...
                /
    STO .OPZ
               . .
              █/
               ○
               ▪
              7
             /
            3  8
           / /
          8  1  0
        / / /
       2  7   4  4
     / / / /
    4  5   2  6   5

             ○
            /█
             ' '

    一只蚂蚁从n行的数字三角形顶部出发往下爬,只能往左下或右下爬,问如何爬才能让它经过的数字和最大?

    【输入】

    第一行一个整数n,表示三角形行数

    接下来的n行是数字三角形

    【输出】

    经过的数字总和最大值

    【样例输入】

    5

    7

    3 8

    8 1 0

    2 7 4 4

    4 5 2 6 5

    【样例输出】

    30

    【输出说明】

    7+3+8+7+5=30

    题解:

    我的第一反应是搜索,但是......T!L!E!

    因此我换了一种思路:用动态规划。

    从顶部出发和从底部出发是一样的,

    每个顶点更新为当前顶点的值加上下面两个顶点的值的最大值,从下往上搜索。

    动规思路如下:

    2 7 4 4        ==>   7 12 10 10

    4 5 2 6 5              4  5   2   6   5

    8 1  0          ==>   20  13  10

    7 12 10 10            7   12  10    10

    3    8           ==>    23  21

    20  13  10              20 13 10

    7                 ==>    30

    23  21                   23 21

    因此答案为30。

    上代码

     1 #include<iostream>
     2 using namespace std;
     3 int a[105][105],b[105][105];
     4 int n;
     5 int main()
     6 {
     7     cin>>n;
     8     int i,j;
     9     for(i=1;i<=n;i++)
    10         for(j=1;j<=i;j++)
    11             cin>>a[i][j];
    12     for(i=1;i<=n;i++)
    13         b[n][i]=a[n][i];
    14     for(i=n-1;i>=1;i--)
    15         for(j=1;j<=i;j++)
    16             b[i][j]=a[i][j]+max(b[i+1][j],b[i+1][j+1]);
    17     cout<<b[1][1];
    18     return 0;
    19 }
  • 相关阅读:
    python-局部变量与全局变量作用域
    python-函数(上):函数返回值、函数调用、前向引用
    python-文件读写
    python-输入和输出
    python-模块介绍及os模块的方法
    python-continue和break的区别
    python-for循环
    python-while循环
    python-三元运算和if...else
    python-数据类型(下) :byte、列表、元组、集合
  • 原文地址:https://www.cnblogs.com/jiaweigao/p/9607920.html
Copyright © 2020-2023  润新知