数塔

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. C学习笔记 知识集锦(二)

     1. 数组和指针 2. 字符串赋值 3. memset&memcpy 4. 机器数和真值,原码,反码和补码 5. 文件指针和文件描述符 6. 内存泄露和内存损坏 7. 什么是不可移植的程序 ...

  2. Spring操作指南-针对JDBC配置声明式事务管理(基于注解)

  3. Power-BI 预警触发的设定

    在现实的业务场景,当某一区域的销售额低于一定的值时,那么就要引起重视了.我们希望当发生这种情况时,通过邮件或微信通知用户进行关注.Power-BI 预警触发功能就可以实现这个功能.一.设定公共参数1. ...

  4. [CC]平面拟合

    常见的平面拟合方法一般是最小二乘法.当误差服从正态分布时,最小二乘方法的拟合效果还是很好的,可以转化成PCA问题. 当观测值的误差大于2倍中误差时,认为误差较大.采用最小二乘拟合时精度降低,不够稳健. ...

  5. varnish 隐藏版本号

    varnish 隐藏方法: 修改default.vcl配置文件. 找到或添加 vcl_deliver 子程序,代码如下: 1 2 3 4 5 sub vcl_deliver {        unse ...

  6. Unable to the boot Simulator ! Mac开机现“CoreTelephony Trace File Error”,

    OS X升级到El Capitan之后,提供一个跟安全相关的模式叫SIP(System Integrity Protection),又称rootless mode,这个新功能在強化OS X的安全性,它 ...

  7. struts---JSP界面验证码生成与验证

    之前想做一个随机验证码的功能,自己也搜索了一下别人写的代码,然后自己重新用struts2实现了一下,现在将我自己实现代码贴出来!大家有什么意见都可以指出来! 首先是生成随机验证码图片的action: ...

  8. People Tools catalog tables.

    People Tools catalog tables. Projects PSPROJECTDEFN — Project header table PSPROJECTITEM — Definitio ...

  9. MVC中使用EF增删改查,简单的例子

    //这个是分页数据和总页数类 public class SummaryBase<TModel> { public SummaryBase(); public IList<TModel ...

  10. sync

    tools-android-Sync Project ---------------- file-Project Structure add dependencies