HDU 2084 数塔【dp(递推)+(记忆化)】
来源:互联网 发布:上海知金教育 编辑:程序博客网 时间:2024/05/08 19:12
数塔
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 41118 Accepted Submission(s): 24431
Problem Description
在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:
有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?
已经告诉你了,这是个DP的题目,你能AC吗?
有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?
已经告诉你了,这是个DP的题目,你能AC吗?
Input
输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。
Output
对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行。
Sample Input
1573 88 1 0 2 7 4 44 5 2 6 5
Sample Output
30
状态方程:dp[i][j]=a[i][j]+max(dp[i+1][j],dp[i+1][j])(dp[i][j]表示从第i层第j个数开始搜能得到的最大数)
#include<cstdio>#include<math.h>#include<cstring>#include<climits>#include<string>#include<queue>#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<climits>#include<string>#include<queue>#include<stack>#include<set>#include<map>#include<algorithm>using namespace std;#define rep(i,j,k)for(i=j;i<k;i++)#define per(i,j,k)for(i=j;i>k;i--)#define MS(x,y)memset(x,y,sizeof(x))#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define ll long long#define abs(x) (x>0?x:-x)const int INF=0x7ffffff;const ll MAX=1e18;const int M=100+10;int dp[M][M];int i,j,k,n,m;int a[M][M];int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d",&n); for(i=1;i<=n;i++) for(j=1;j<=i;j++){ int num; scanf("%d",&num); a[i][j]=num; } MS(dp,0); for(i=1;i<=n;i++)dp[n][i]=a[n][i]; for(i=n-1;i>=1;i--) for(j=1;j<=i;j++){ dp[i][j]=a[i][j]+max(dp[i+1][j],dp[i+1][j+1]); } printf("%d\n",dp[1][1]); } return 0;}记忆化dp
#include<cstdio>#include<math.h>#include<cstring>#include<climits>#include<string>#include<queue>#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<climits>#include<string>#include<queue>#include<stack>#include<set>#include<map>#include<algorithm>using namespace std;#define rep(i,j,k)for(i=j;i<k;i++)#define per(i,j,k)for(i=j;i>k;i--)#define MS(x,y)memset(x,y,sizeof(x))#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define ll long long#define abs(x) (x>0?x:-x)const int INF=0x7ffffff;const ll MAX=1e18;const int M=100+10;int dp[M][M];int i,j,k,n,m;int a[M][M];int DP(int i,int j){ if(dp[i][j]>=0)return dp[i][j]; if(i>n)return 0; dp[i][j]=a[i][j]+max(DP(i+1,j),DP(i+1,j+1)); return dp[i][j];}int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d",&n); for(i=1;i<=n;i++) for(j=1;j<=i;j++){ int num; scanf("%d",&num); a[i][j]=num; } MS(dp,-1); printf("%d\n",DP(1,1)); } return 0;}
0 0
- HDU 2084 数塔【dp(递推)+(记忆化)】
- HDU 2084 数塔 (DP递推)
- HDU 3555 (递推&&记忆化)
- HDU4571-区间DP,记忆化搜索,递推
- POJ1088 滑雪 经典DP 记忆化搜索和递推
- HDU 2084 数塔 dp
- hdu 2084 数塔 dp
- HDU 2084 数塔 DP
- HDU 2084 数塔(dp)
- HDU 2084 数塔 DP
- hdu 2084 数塔(dp)
- HDU 2084 数塔(DP)
- HDU 2084 数塔(DP)
- hdu 2084 数塔 dp
- HDU 2084 数塔 (DP)
- HDU-2084-数塔【DP】
- HDU 2084 数塔 DP .
- HDU 2084 数塔 dp
- Add to numbers
- VS无法正常加载Wpf后台刷新ui的自定义控件
- 贪吃蛇c++ 乱写的
- 将本地项目托管到GitHub上
- 设计一个程序输入两个日期计算相隔多少天,或计算一个日期加上间隔后的日期。
- HDU 2084 数塔【dp(递推)+(记忆化)】
- 在IOS中嵌套H5页面发生空白的问题
- MySQL数据库的函数
- python实现线性表顺序存储的插入操作
- Android Stadio 代码模板 fbc的使用
- Rviz教程-Marker:点和线(C++)
- poj 3264 线段树,链表实现
- shell脚本编程(一)
- redis 配置详解