zoukankan      html  css  js  c++  java
  • 动态的数字三角形

    试题描述

        一个数字组成的三角形,有n行,第i行有i个数。从第一个数开始,每次可以往左下或右下走一格,直到走到最后一行,把沿途经过的数全部加起来。如何走才能得到最大的和?
        举个例子:
                          
        为了简单起见,输入时将每行的数依次输入,第一个数之前并不输入空格。

    输入
    第一行:n,表示这个三角形共有n行
    第二至n+1行:依次为这个数字三角形各行的数据(按顺序输入),两数之间有一个空格分隔。 
    输出
    一个数,表示最大的和
    输入示例
    4
    1
    3 2
    4 10 1
    4 3 2 20
    输出示例
    24
    其他说明
    xjr提示你:简单的dp,你懂的。数据范围:0 < n < 1001,组成数字三角形的数都是不超过1000的自然苏 。
     
     1 #include <iostream>
     2 
     3 using namespace std;
     4 int a[1001][1001],b[1001][1001];
     5 int read() //输入模板 
     6 {
     7     int x=0,f=1;
     8     char ch=getchar();
     9     while(ch<'0'||ch>'9')
    10     {
    11         if(ch=='-') f=-1;
    12         ch=getchar();
    13     }
    14     while(ch>='0'&&ch<='9')
    15     {
    16         x=x*10+ch-'0';
    17         ch=getchar();
    18     }
    19     return x*f;
    20 } 
    21 int main()
    22 {
    23     int n,i,j;
    24     n=read();
    25     for(i=1;i<=n;i++)
    26         for(j=1;j<=i;j++) a[i][j]=read();
    27     //for(i=1;i<n/2;i++) a[n/2][i]=0;
    28     for(i=1;i<=n;i++)
    29     {
    30         for(j=1;j<=i;j++)
    31         {
    32             b[i][j]=max(a[i][j]+b[i-1][j-1],a[i][j]+b[i-1][j]);
    33         }
    34     }
    35     int ans=0;
    36     for(i=1;i<=n;i++)
    37         if(b[n][i]>ans) ans=b[n][i];
    38     printf("%d",ans); 
    39     //system("pause");
    40     return 0;
    41 }
    动态的数字三角形

     具体思路见相册中的动态的数字三角形~

  • 相关阅读:
    wc.exe个人项目
    自我介绍+软工5问
    软件工程团队作业-测试与发布
    结对项目
    个人项目作业
    自我介绍+软工5问
    代码开发、测试及发布
    需求改进&系统设计
    综合系统开发——需求分析
    读书笔记----软件设计原则、设计模式
  • 原文地址:https://www.cnblogs.com/YXY-1211/p/5244137.html
Copyright © 2011-2022 走看看