数塔

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 21314    Accepted Submission(s): 12808

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
2006/1/15 ACM程序设计期末考试

总的来说是dp的入门级题目吧,由于要表示这个状态方程比較简单。从下往上:dp[i][j]+=dp[i+1][j+1],dp[i+1][j]

从上往上呢:dp[i][j]+=max(dp[i-1][j-1],dp[i-1][j];可是从上往下你还要推断两边界的值,当它处于左边界的时候

有dp[i][0]+=dp[i-1][0];右边界则是dp[i][i]+=dp[i-1][j-1];

以下是代码:

/*
从上到下
*/
#include<stdio.h>
#include<iostream>
#define max(a,b) a>b?a:b
using namespace std;
int dp[360][360];
int main()
{
int t,i,j,n;
int maxn;
cin>>t;
while(t--)
{
cin>>n;
for(i=0;i<n;i++)
for(j=0;j<=i;j++)
cin>>dp[i][j];
for(i=1;i<n;i++)
{
dp[i][0]+=dp[i-1][0];
dp[i][i]+=dp[i-1][i-1];
}
for(i=2;i<n;i++)
{
for(j=1;j<i;j++)
dp[i][j]+=max(dp[i-1][j-1],dp[i-1][j]);
}
for(maxn=-1,j=0;j<n;j++)
maxn=max(maxn,dp[n-1][j]);
cout<<maxn<<endl;
}
return 0;
}
/*
从下到上
*/ #include<iostream>
#include<cstdio>
int dp[1001][1001];
#define max(a,b) a>b? a:b
using namespace std;
int main(int i,int j)
{
int t;
int n;
cin>>t;
while(t--)
{
cin>>n;
for(i=0;i<n;i++)
for(j=0;j<=i;j++)
cin>>dp[i][j];
for(i=n-1;i>=0;i--)
for(j=0;j<=i;j++)
dp[i][j]+=max(dp[i+1][j+1],dp[i+1][j]);
cout<<dp[0][0]<<endl;
}
return 0;
}
相比而言这个会更简单,由于这样它就就归到一个定点,不用推断它是否为最大值了,另一种记忆化搜索,是在动态规划基础上进行优化的

简单的dp hdu 数塔(水题)的更多相关文章

  1. HDU 1176 免费馅饼 DP类似数塔题

    解题报告: 小明走在一条小路上,这条小路的长度是10米,从左到右依次是0到10一共十个点,现在天上会掉馅饼,给出馅饼掉落的坐标和时间,一开始小明的位置是在坐标为5的位置, 他每秒钟只能移动一米的距离, ...

  2. hdu 5210 delete 水题

    Delete Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5210 D ...

  3. 恶补一下DP+背包专题(刷刷水题)L2

    开心的金明 题目大意 就是求一定背包容量的最大值 思路 想必大家都知道,一看到这种题目,就会想起01背包 虽然特别简单但是还是讲一下吧 状态设置 由于这题差不多是一个01背包的版子题,那么我们就只需要 ...

  4. ytu 1061: 从三个数中找出最大的数(水题,模板函数练习 + 宏定义练习)

    1061: 从三个数中找出最大的数 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 154  Solved: 124[Submit][Status][We ...

  5. DP入门数塔问题

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

  6. CCF 201409-1 相邻数对 (水题)

    问题描述 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1. 输入格式 输入的第一行包含一个整数n,表示给定整数的个数. 第二行包含所给定的n个整数. 输出格式 输出一个整数,表示值正好 ...

  7. dp入门—数塔

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

  8. hdu 1251 (Trie水题)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

  9. HDU 5703 Desert 水题 找规律

    已知有n个单位的水,问有几种方式把这些水喝完,每天至少喝1个单位的水,而且每天喝的水的单位为整数.看上去挺复杂要跑循环,但其实上,列举几种情况之后就会发现是找规律的题了= =都是2的n-1次方,而且这 ...

随机推荐

  1. IOS 自动布局-UIStackPanel和UIGridPanel(二)

    在上一篇中我提到了如何使用stackpanel和gridpanel来实现自动布局.而在这一篇中我着重讲解下其中的原理. 在(UIPanel   UIStackPanel  UIGridPanel)中主 ...

  2. Linux基础命令详解-1

    本篇详解的命令有以下30个 1.cd 功能:切换工作目录 参数列表     2.ls 功能:查看目录里的内容 参数列表     3.mv 功能:  移动或重命名文件和目录 参数列表     4.pwd ...

  3. Leetcode 322.零钱兑换

    零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输入: co ...

  4. [UOJ#127][BZOJ4195][NOI2015]程序自动分析

    [UOJ#127][BZOJ4195][NOI2015]程序自动分析 试题描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2, ...

  5. BZOJ 1813 [Cqoi2017]小Q的棋盘 ——树形DP

    唔,貌似以前做过这样差不多的题目. 用$f(i,0/1)$表示从某一点出发,只能走子树的情况下回到根.不回到根的最多经过不同的点数. 然后就可以DP辣 #include <map> #in ...

  6. [BZOJ1574] [Usaco2009 Jan]地震损坏Damage(贪心 + dfs)

    传送门 告诉你一些点不能到达1,由于是双向边,也就是1不能到达那些点 那么从1开始dfs,如果当前点能到达不能到达的点,那么当前点就是损坏的. #include <cstdio> #inc ...

  7. SHOWMODALDIALOG表单提交时禁止打开新窗口

    前提条件:showmodaldialog中有表单form.当action="#"的时候,提交表单,不会打开新窗口,但这种#自提有时不能用,#是本页面完整的带参数的url,如果表单中 ...

  8. PXC小结

    PXC使用到的端口号 3306 数据库对外服务的端口号(视具体情况而定) 4444 请求SST SST: 指数据一个镜象传输 xtrabackup , rsync ,mysqldump  4567 : ...

  9. 代码布局relativeLayout

    后台布局   在ANDROID 开发中有时候我们需要在后台添加布局文件这里我们来说一下后台添加RelativeLayout文件的方式: RelativeLayout,顾名思义,就是以“相对”位置/对齐 ...

  10. golang测试框架--smartystreets/goconvey

    视频教程和配套博客:goconvey - 课时 1:优雅的单元测试 Go 语言虽然自带单元测试功能,在 GoConvey 诞生之前也出现了许多第三方辅助库.但没有一个辅助库能够像 GoConvey 这 ...