在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 
有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 

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

Input

输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。

Output

对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行。

Sample Input

  1. 1
  2. 5
  3. 7
  4. 3 8
  5. 8 1 0
  6. 2 7 4 4
  7. 4 5 2 6 5

Sample Output

  1. 30
  2.  
  3. // 递归
  1. #include<stdio.h>
  2.  
  3. int n, t[][];
  4.  
  5. int tower(int i, int j)
  6. {
  7. if(i==n-) return t[i][j];
  8. if(tower(i+,j)>tower(i+,j+))
  9. return tower(i+,j)+t[i][j];
  10. else
  11. return tower(i+,j+)+t[i][j];
  12. }
  13.  
  14. int main()
  15. {
  16. int c;
  17. scanf("%d", &c);
  18. while(c--)
  19. {
  20. scanf("%d", &n);
  21. for(int i=;i<n;i++)
  22. for(int j=;j<=i;j++)
  23. scanf("%d", &t[i][j]);
  24. printf("%d\n",tower(,));
  25. }
  26. return ;
  27. }

Time Limit Exceeded

  1. //
  1. #include<stdio.h>
  2. #include<string.h>
  3. int n, t[][], d[][];
  4.  
  5. int tower(int i, int j)
  6. {
  7. if(d[i][j]>=) return d[i][j];
  8. return d[i][j] = t[i][j] + (i==n-?:(tower(i+,j)>tower(i+,j+)?tower(i+,j):tower(i+,j+)));
  9. }
  10.  
  11. int main()
  12. {
  13. int c;
  14. scanf("%d", &c);
  15. while(c--)
  16. {
  17. scanf("%d", &n);
  18. for(int i=;i<n;i++)
  19. for(int j=;j<=i;j++)
  20. scanf("%d", &t[i][j]);
  21. memset(d,-,sizeof(d));
  22. printf("%d\n",tower(,));
  23. }
  24. return ;
  25. }

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. Postman Could not get any response

    在使用postman时遇到的小问题,记录一下: 报错信息如下: Could not get any response There was an error connecting to https:// ...

  2. 网络通信协议tcp,udp区别

    1 网络通信协议 Tcp udp的区别 重点(*****) Tcp三次握手四次挥手(******) udp客户端多人聊天 import socket udp_client = socket.socke ...

  3. redis--解析字符串

    # coding=utf-8import codecs if __name__ == '__main__': cmdlist = ("Decode") while True: cm ...

  4. PID控制器介绍

    在维基百科上查到的PID的介绍,收藏一下,慢慢看. https://zh.wikipedia.org/wiki/PID%E6%8E%A7%E5%88%B6%E5%99%A8#%E6%AF%94%E4% ...

  5. centos7安装svn

    摘抄自http://blog.csdn.net/junehappylove/article/details/65963025 1.安装 sudo yum install subversion 查看安装 ...

  6. JAX-RS和 Spring 整合开发

    JAX-RS 和 和 Spring 整合开发 1.建立maven项目 2.导入maven坐标 <dependencies> <!-- cxf 进行rs开发 必须导入 --> & ...

  7. Swoft 容器使用

    可以借助Swoft下的Bean类操作容器 示例: 将类绑定至容器 use Swoft\Bean\Annotation\Bean; /** * @Bean("imageLogic") ...

  8. thinkphp5.1 退出登陆操作

    使用Session:: 静态方法即可

  9. MyBatis 生命周期

    一.SqlSessionFactoryBuilder SqlSessionFactoryBuilder是利用XML或是Java编码获得资源来构建SqlSessionFactory的,通过他可以构建多个 ...

  10. python3集合练习(set)

    #集合是由不同元素组成;无序;集合中的元素必须是不可变类型;#s = {} 或者 s = set() 创建集合#update()扩展集合.返回值为Noneg1 = {'wcj','good','luc ...