数塔

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 36261    Accepted Submission(s): 21659

Problem 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
 
Recommend
lcy   |   We have carefully selected several similar problems for you:  1176 1003 1087 1159 1069 
 
刚看了动态规划,就做了道dp的题目。虽然动态规划还没整明白,但是感觉这道题还是很好理解的。
在做完这道题目之后我又回顾了一下书(算法导论)中所讲:
“我们通常按如下四个步骤来设计一个动态规划的算法:
  1. 刻画一个最优解的结构特征。
  2. 递归地定义最优解的值。
  3. 计算最优解的值,通常采用自底向上的方法。
  4. 利用计算出的信息构造一个最优解。”

我觉得这道题的解题步骤就完全可以用这个来描述:

    1.首先,一个最优解的结构特征,即从顶层走到底层,其各个节点的最大数字之和的为最优解。

    2.题目中要求走法为自顶向下,且每一步只能走到相邻的节点,那么每个节点只有两种选择,即这个节点的两个子节点;

      那么这个节点的最优解就等于这个节点的值加上其两个节点的最优解的最大值;

    3.自底向上的求解。

    4.我们所求出来的解就是我们所需要的答案,则第四步在这里可以忽略掉。

最后附上我的代码:

  我用数组a来接收数塔的值,则第三部可以表示为:a[i][j]的最优解=a[i][j]+max(a[i+1][j]的最优解,a[i+1][j+1]的最优解);

而数塔最底层节点的最优解就等于他本身的值,因为他只有一个;那么最底层的值已知,我们只需要从下往上递推就可以了

即这三行代码块:

             for(i=n-1;i>=0;i--)
for(j=0;j<=i;j++)
a[i][j]=a[i][j]+max(a[i+1][j],a[i+1][j+1]);
AC代码:
 #include<iostream>
#include<algorithm>
#include<cstring>
using namespace std; int main()
{
int a[][];
int t, n, i, j;
while(cin>>t)
{
while(t--)
{
cin>>n;
memset(a,,sizeof(a));
for(i=;i<n;i++)
for(j=;j<=i;j++)
cin>>a[i][j];
for(i=n-;i>=;i--)
for(j=;j<=i;j++)
a[i][j]=a[i][j]+max(a[i+][j],a[i+][j+]);
cout<<a[][]<<endl;
}
}
return ;
}

ACM 杭电HDU 2084 数塔 [解题报告]的更多相关文章

  1. hdu 2084 数塔 (简单dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=2084 数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory L ...

  2. HDU 2084 数塔(动态规划)

    数塔 http://acm.hdu.edu.cn/showproblem.php?pid=2084 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描 ...

  3. HDU 2084 数塔(简单DP入门)

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  4. 题解报告:hdu 2084 数塔(递推dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这 ...

  5. HDU 2084 数塔 (DP)

    数塔 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Pr ...

  6. HDU 2084 数塔 (dp)

    题目链接 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数 ...

  7. HDU 2084 数塔 (动态规划DP)

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 题目分析:此题采用动态规划自底向上计算,如果我们要知道所走之和最大,那么最后一步肯定是走最后一排 ...

  8. hdu 2084 数塔(动态规划)

    本题是一个经典的动态规划题. 直接利用记忆化搜索:见图解 Ac code : #include<stdio.h> #include<string.h> #define max( ...

  9. HDU 2084 数塔

    没什么好说的,这是我学DP的第一道题目. //#define LOCAL #include <iostream> #include <cstdio> #include < ...

随机推荐

  1. Python学习【第五篇】循环语句

    Python循环语句 接下来将介绍Python的循环语句,程序在一般情况下是按顺序执行的. 编程语言提供了各种控制结构,允许更复杂的执行路径. 循环语句允许我们执行一个语句或语句组多次. Python ...

  2. 第四篇:白话tornado源码之褪去模板外衣的前戏

    加班程序员最辛苦,来张图醒醒脑吧! ... ... ... 好了,醒醒吧,回归现实看代码了!! 执行字符串表示的函数,并为该函数提供全局变量 本篇的内容从题目中就可以看出来,就是为之后剖析tornad ...

  3. android.graphic.Path

    类path是一个封装的几何学路径包括直线,二次曲线,三次曲线.它可以通过函数canvas.drawPath(path, paint)画出来,可以通过填充方式或者画线方式(由paint的style决定) ...

  4. ios - runtime运行时应用---交换方法

    runtime运行时用法之一 --- 交换类的方法,此处简单写了把系统的UIView的setBackgroundColor的方法换成了自定义的pb_setBackgroundColor 首先创建UIV ...

  5. GPS部标监控平台的功能设计(一)-功能列表

    在2011年交通部的796标准推出后,随着各地交管部门的硬性要求,大多数的GPS监控系统或者车辆管理系统或者物流管理系统,无论是旧的,还是新开发的,都必须要以796标准为基础蓝本,首先要满足796的要 ...

  6. Python调用C++

    /***gcc -o libpycall.so -shared -fPIC pycall.c*/ #include <stdio.h> #include <stdlib.h> ...

  7. 拼接LINQ动态表达式

    using System; using System.Linq; using System.Linq.Expressions; public static class LinqBuilder { // ...

  8. jQuery Scroll Follow

    Overview Scroll Follow is a simple jQuery plugin that enables a DOM object to follow the page as the ...

  9. 利用Python实现从百度下载图片到本地磁盘

    import urllib.request import os import re url=r'http://image.baidu.com/search/index?tn=baiduimage&am ...

  10. 《玩转D语言系列》二、D语言现状、基本规定和相关资源介绍

    这算是本系列文章的一个序吧,主要是为以后的学习做铺垫,文本分为三个部分,第一部分是对于网上一些比较旧的资料的问题的一些更正,当然我也不可能看过所有的资料,难免会有遗漏.第二部分是D语言最基本的规定,第 ...