zoukankan      html  css  js  c++  java
  • 89.数字三角形

    1220 数字三角形

     

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 黄金 Gold
    题目描述 Description

    如图所示的数字三角形,从顶部出发,在每一结点可以选择向左走或得向右走,一直走到底层,要求找出一条路径,使路径上的值最大。

    89.数字三角形
    输入描述 Input Description

    第一行是数塔层数N(1<=N<=100)。

    第二行起,按数塔图形,有一个或多个的整数,表示该层节点的值,共有N行。

    输出描述 Output Description

    输出最大值。

    样例输入 Sample Input

    5

    13

    11 8

    12 7 26

    6 14 15 8

    12 7 13 24 11

    样例输出 Sample Output

    86

    数据范围及提示 Data Size & Hint
    数字三角形

    分类标签 Tags 点此展开 

    动态规划做法:
    #include
    using namespace std;
    #include
    int f[101][101],a[101][101];
    int main()
    {
     int n;
     scanf("%d",&n);
     for(int i=1;i<=n;++i)
       for(int j=1;j<=i;++j)
       {
        scanf("%d",&a[i][j]);
           f[i][j]=a[i][j];
       }
     for(int i=n-1;i>=1;--i)
       for(int j=1;j<=i;++j)
       f[i][j]=max(f[i+1][j],f[i+1][j+1])+a[i][j];
     printf("%d ",f[1][1]);
     return 0;
    }
    深度优先搜索做法:
    #include
    using namespace std;
    #include
    #include
    int n,f[101][101],a[101][101];
    int dfs(int i,int j)
    {
     if(i==n) return a[i][j];
     if(f[i][j]!=0) return f[i][j];
     f[i][j]=max(dfs(i+1,j),dfs(i+1,j+1))+a[i][j];
     return f[i][j];
    }
    int main()
    {
     scanf("%d",&n);
     for(int i=1;i<=n;++i)
       for(int j=1;j<=i;++j)
       {
        scanf("%d",&a[i][j]);
        
       }
     if(n==1)//处理n是1层的时候,深搜就不必进行了
     {
      printf("%d ",a[1][1]);
      return 0;
     }
     int i=1,j=1;
     f[1][1]=max(dfs(i+1,j),dfs(i+1,j+1))+a[1][1];
     printf("%d ",f[1][1]);
     return 0;
    }
  • 相关阅读:
    C平衡二叉树(AVL)创建和删除
    C格式字符串转为二叉树
    C前序遍历二叉树Morris Traversal算法
    C单链表操作
    C仿黑白棋版XO棋
    C传递参数给main函数
    C图形化第一步
    Perl看完这个,再不敢说自己会玩贪吃蛇
    Perl寻路A*算法实现
    C字符贪吃蛇
  • 原文地址:https://www.cnblogs.com/c1299401227/p/5370731.html
Copyright © 2011-2022 走看看