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

// 递归
 #include<stdio.h>

 int n, t[][];

 int tower(int i, int j)
{
if(i==n-) return t[i][j];
if(tower(i+,j)>tower(i+,j+))
return tower(i+,j)+t[i][j];
else
return tower(i+,j+)+t[i][j];
} int main()
{
int c;
scanf("%d", &c);
while(c--)
{
scanf("%d", &n);
for(int i=;i<n;i++)
for(int j=;j<=i;j++)
scanf("%d", &t[i][j]);
printf("%d\n",tower(,));
}
return ;
}

Time Limit Exceeded

// 
 #include<stdio.h>
#include<string.h>
int n, t[][], d[][]; int tower(int i, int j)
{
if(d[i][j]>=) return d[i][j];
return d[i][j] = t[i][j] + (i==n-?:(tower(i+,j)>tower(i+,j+)?tower(i+,j):tower(i+,j+)));
} int main()
{
int c;
scanf("%d", &c);
while(c--)
{
scanf("%d", &n);
for(int i=;i<n;i++)
for(int j=;j<=i;j++)
scanf("%d", &t[i][j]);
memset(d,-,sizeof(d));
printf("%d\n",tower(,));
}
return ;
}

AC

7I - 数塔的更多相关文章

  1. 数塔问题(DP算法)自底向上计算最大值

    Input 输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数 ...

  2. dp入门--poj 1163数塔

                                                                                                        ...

  3. ACM 杭电HDU 2084 数塔 [解题报告]

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

  4. [ACM_动态规划] 数字三角形(数塔)

    递归方法解决数塔问题 状态转移方程:d[i][j]=a[i][j]+max{d[i+1][j],d[i+1][j+1]} 注意:1\d[i][j]表示从i,j出发的最大总和;2\变界值设为0;3\递归 ...

  5. HDU-2084 数塔 经典dp,水

    1.HDU-2084   数塔 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 3.总结:从下往上推,最后归于顶点.方程为  dp[i][j] ...

  6. HDU2084基础DP数塔

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

  7. hdu----(2084)数塔(dp)

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

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

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

  9. hdu 2084 数塔 (简单dp)

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

随机推荐

  1. C#将unix时间戳转换成.net的DateTime类型的代码

    下面的内容是关于C#将unix时间戳转换成.net的DateTime类型的内容. DateTime epoch = new DateTime(1970,1,1,0,0,0,0, DateTimeKin ...

  2. html client websocket

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 214. Spring Security:概述

    前言 在之前介绍过了Shiro之后,有好多粉丝问SpringSecurity在Spring Boot中怎么集成.这个系列我们就和大家分享下有关这方面的知识. 本节大纲 一.什么是SpringSecur ...

  4. C 语言 变量的赋值和初始化

    根据我所了解和理解: int i 当定义一个这样的变量的时候,计算机将在内存中给变量分配空间,此时 i 的值为,此处空间内原来是什么现在还是什么,相当于打开一个房间,你没有清扫它你就住进去了. 多变量 ...

  5. zabbix使用SNMPV3协议监控交换机

    SNMPV3是简单网络管理协议的第三版,因为其安全性更高,现在的中低端交换机已普遍支持该协议,所以在生产环境中我们应该采用SNMPV3对交换机.路由器进行管理. 首先在交换机上要配置SNMPV3协议, ...

  6. sql 条件汇总

    select * from a pivot(sum([总业绩]) for 周期 in ([1月],[2月],[3月],[4月])) as b

  7. PHP批量保存图片

    关于这个问题网上也有回答,我只是把我在工作中用到的代码分解出来,供需要的朋友使用.以下代码都已经经过测试,所以没有任何问题.有问题请加QQ:1127173874 第一部分 数据库表结构 create ...

  8. Android短信过滤项目中的观察者模式

    观察者模式: 观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. 观察者模式提供了一种对象设计, 让主题和观察者之间松耦合.主题只知道观察者实现了某个接 ...

  9. as3 加载进来的swf进行缩放

    private function swfComHdl(_loader:Loader, _data:*= null){ frameLder = _loader; gameMC = frameLder.c ...

  10. C++ std::unordered_map使用std::string和char *作key对比

    最近在给自己的服务器框架加上统计信息,其中一项就是统计创建的对象数,以及当前还存在的对象数,那么自然以对象名字作key.但写着写着,忽然纠结是用std::string还是const char *作ke ...