zoukankan      html  css  js  c++  java
  • 10303 数字三角(优先做)

    10303 数字三角(优先做)

    时间限制:1000MS  内存限制:65535K
    提交次数:117 通过次数:56

    题型: 编程题   语言: G++;GCC;VC

     

    Description

    问题描述:给定一个由n行数字组成的数字三角形,如下图所示。试用动态规划算法,计算出从三角
    顶部至底部的一条路径,使得该路径经过的数字总和最大。
    
    注意每个数字只能走向下一行左边或右边的数字,而不能跳跃的走。
    
             7
          3   8
        8   1   0
      2   7   4   4
    4   5   2   6   5
    




    输入格式

    第一行是数字三角的行数n,1<=n<=100。接下来n行是数字三角各行中的数字,所有数字在0~99之间。



    输出格式

    输出两行,第一行是计算出的最大路径的和值,第二行是该路径上的数字。若有多条路径,靠右的路径
    优先(即仅仅输出靠右的路径即可,无需多条路径都输出)。
    
    
    如:
    Input: 
    5
    7
    3 8
    8 1 6
    2 7 4 4
    4 5 2 4 5
    有两条路径:7-3-8-7-5和7-8-6-4-5都为30,由于后者靠右,因此仅输出后者。
    Output: 
    30
    7 8 6 4 5
    



     

    输入样例

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



     

    输出样例

    30
    7 3 8 7 5



    我的代码实现

     1 #include<stdio.h>
     2 #define N 101
     3 int a[N][N],m[N][N];
     4 
     5 
     6 int max(int a,int b){
     7     return a>b?a:b;
     8 }
     9 
    10 
    11 void MaxRoad(int n){
    12     for(int j=1;j<=n;j++) 
    13     m[n][j]=a[n][j];
    14     for(int i=n-1;i>=1;i--){
    15         for(int j=1;j<=i;j++){
    16             m[i][j]=max(m[i+1][j],m[i+1][j+1])+a[i][j];
    17         }
    18     }
    19 }
    20 
    21 void Back(int n){
    22     int j=1;//j不变表示向下走,j+1表示往右走 
    23     printf("%d ",a[1][1]); 
    24     for(int i=2;i<=n;i++){
    25         if(m[i][j]<=m[i][j+1]){
    26             printf("%d ",a[i][j+1]);
    27             j=j+1;    
    28         }
    29         else{
    30         printf("%d ",a[i][j]);
    31         }
    32     } 
    33 }
    34     
    35 
    36 int main(){    
    37     int n;
    38     scanf("%d",&n);
    39     for(int i=1;i<=n;i++){
    40         for(int j=1;j<=i;j++){
    41             scanf("%d",&a[i][j]);
    42         }
    43     }
    44     MaxRoad(n);
    45     printf("%d
    ",m[1][1]);
    46     Back(n);
    47     return 0;
    48 } 
    
    
    
     
  • 相关阅读:
    Thinkphp3.2.3关于开启DEBUG正常,关闭DEBUG就报错模版无法找到,页面错误!请稍后再试~
    Apache 工作模式的正确配置
    TIME_WAIT 你好!
    对称加密实现重要日志上报Openresty接口服务
    阿里nas挂载错误
    机器装多个版本php,并安装redis插件报错【已解决】
    find 删除文件
    从头认识java-6.7 初始化与类的加载
    从头认识java-6.6 final(4)-类与忠告
    从头认识java-6.6 final(3)-方法
  • 原文地址:https://www.cnblogs.com/double891/p/7856924.html
Copyright © 2011-2022 走看看