zoukankan      html  css  js  c++  java
  • WUST Online Judge

    1195: 零起点学算法102——数塔

    Time Limit: 1 Sec  Memory Limit: 32 MB   64bit IO Format: %lld
    Submitted: 971  Accepted: 550
    [Submit][Status][Web Board]

    Description

    在讲述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
    

    Source

    零起点学算法

    代码如下:

    #include <stdio.h>
    
    int main() {
        int M, i, j, N;
        int a[101][101];
        while (scanf("%d", &M) != EOF) {
            while (M--) {
                scanf("%d", &N);
                for (i = 0; i < N; i++)
                    for (j = 0; j <= i; j++)
                        scanf("%d", &a[i][j]);
                for (i = N - 1; i>=0; i--) {
                    for (j = 0; j <= i; j++) { //DP算法就不多解释了
                        if (a[i][j] + a[i-1][j] > a[i][j+1] + a[i-1][j])
                            a[i-1][j] = a[i][j] + a[i-1][j];
                        else
                            a[i-1][j] = a[i][j+1] + a[i-1][j];
                    }
                }
                printf("%d
    ", a[0][0]);
            }
        }
        return 0;
    }
    
    作者:McR
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    实验一 命令解释程序
    复利计算器3.0更新版
    复利计算器3.0总结
    复利计算器2.0
    0414复利计算5.1-美观、输入更新
    0408结对汉堡-结对2.0
    0406复利计算程序5.0-结对编程
    《构建之法》第四章读后感
    复利计算4.0-单元测试
    操作系统实验一、 命令解释程序的编写
  • 原文地址:https://www.cnblogs.com/mcr-tcp/p/9167910.html
Copyright © 2011-2022 走看看