zoukankan      html  css  js  c++  java
  • 数塔

    在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:

    有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?

    已经告诉你了,这是个DP的题目,你能AC吗?

    Input输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。
    Output对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行。
    Sample Input
    1
    5
    7
    3 8
    8 1 0 
    2 7 4 4
    4 5 2 6 5
    Sample Output
    30
    一道简单DP
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 #define MAX 105
     5 
     6 int main()
     7 {
     8     int n;
     9     int tri[MAX][MAX];  //存放三角形数据
    10     int maxNum[MAX];    //存放每个子问题的最大数
    11     int c;
    12     int i,j,k;
    13     scanf("%d",&c);
    14     for (k=0; k<c; k++)
    15     {
    16       scanf("%d",&n);
    17       for (i=1; i<=n; i++)
    18         for (j=1; j<=i; j++)
    19           scanf("%d",&tri[i][j]);
    20       for (i=1; i<=n; i++)
    21         maxNum[i] = tri[n][i];
    22       for (i=n; i>1; i--)
    23         for (j=1; j<i; j++)
    24         {
    25           if (maxNum[j]>maxNum[j+1])
    26             maxNum[j] += tri[i-1][j];
    27           else
    28             maxNum[j] = maxNum[j+1]+tri[i-1][j];
    29         }
    30       printf("%d
    ",maxNum[1]);
    31     }
    32     return 0;
    33 }
    蒹葭苍苍,白露为霜; 所谓伊人,在水一方。
  • 相关阅读:
    shell day01总结
    PythonDay02
    Python Day01
    802.11X
    IPsec
    Gre封装
    达梦数据库常见问题-命令行工具-主备集群监视器工具
    达梦数据库常见问题-命令行工具-初始化实例工具
    达梦数据库常见问题-命令行工具-快速装载工具
    达梦数据库常见问题-命令行工具-数据检查工具
  • 原文地址:https://www.cnblogs.com/huwt/p/9986292.html
Copyright © 2011-2022 走看看