hdu2084 数塔 记忆化搜索水题
来源:互联网 发布:耐克高仿淘宝店铺 编辑:程序博客网 时间:2024/06/05 23:59
数塔Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 33327 Accepted Submission(s): 19904Problem Description在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?已经告诉你了,这是个DP的题目,你能AC吗?Input输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。Output对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行。Sample Input1573 88 1 0 2 7 4 44 5 2 6 5Sample Output30Source2006/1/15 ACM程序设计期末考试
来源: http://acm.hdu.edu.cn/showproblem.php?pid=2084
状态方程 d(i,j) = a(i,j) + max{ d(i+1,j),d(i+1,j+1) }//------------------------------------------------------非递归写法未超时---------------------------------------------------//#include <iostream>#include <cstdio>#include <map>#include <cstdlib>#include <cmath>#include <algorithm>#include <cstring>using namespace std;int A[101][101],N;int D[101][101];int Cal(int i,int j){ if(D[i][j]>=0) return D[i][j]; else return D[i][j] = A[i][j] + (i==N? 0:max(Cal(i+1,j),Cal(i+1,j+1)));}int main(){ //freopen("F:\\test.txt","r",stdin); int T;cin>>T; for(int i=1;i<=T;i++) { memset(D,-1,sizeof(D));cin>>N; for(int j=1;j<=N;j++) for(int k=1;k<=j;k++) cin>>A[j][k]; cout<<Cal(1,1)<<endl; } return 0;}
/***********************************递归写法超时|*****************************************/#include <cstdio>#include <cstring>#define high 100int A[high+1][high+1];int B[high+1][high+1];int MAX(int High,int i){ return B[High][i]>=B[High][i+1]?B[High][i]:B[High][i+1];}int Cal(int High){ for(int i=1;i<=High;i++) B[High][i]=(MAX(High+1,i)+A[High][i]); if(High==1) return B[1][1];//顶部边界 else return Cal(High-1);}int Handle(int N){ for(int i=1;i<=N;i++) for(int j=1;j<=i;j++) scanf("%d",&A[i][j]); for(int i=1;i<=N;i++) B[N][i]=A[N][i];//设置边界 return Cal(N-1);//从第倒数第二层向下找}int main(){ int T;scanf("%d",&T); for(int i=1,N;i<=T&&scanf("%d",&N);i++) { printf("%d\n",Handle(N)); /* for(int i=1;i<=N;i++) { for(int j=1;j<=i;j++) printf("%I64d ",B[i][j]); putchar('\n'); }*/ } return 0;}
0 0
- hdu2084 数塔 记忆化搜索水题
- hdu2084动态规划入门题----数塔
- hdu2084 数塔 动态规划第二题
- hdu2084数塔问题
- HDU2084(数塔)
- HDU2084:数塔
- hdu2084 数塔
- HDU2084 数塔
- hdu2084 数塔
- hdu2084数塔
- hdu2084 dp数塔
- HDU2084:数塔(DP)
- HDU2084 数塔
- hdu2084 数塔
- HDU2084 数塔
- hdu2084数塔
- hdu2084数塔
- hdu2084数塔
- HDU 1231 最大连续子序列
- 安卓开发中非常炫的效果集合
- HDU 1003Max Sum 动态规划 经典题 最大子序列和
- Create Volume 操作(Part II) - 每天5分钟玩转 OpenStack(51)
- 本周笔记整理(关于php面向对象的一些基层知识点)
- hdu2084 数塔 记忆化搜索水题
- ScrollView嵌套ListView,GridView,ViewPager,以及这些控件自动滚动到底部问题的解决
- Android Studio项目目录结构介绍
- Android命令行创建并运行 AVD模拟器
- [HihoCoder]#1014 : Trie树
- Android SDK下载速度慢的解决方法(简单使用代理)
- HDU1257 最少拦截系统 贪心算法 (多人乘船问题)水题
- mysql 联合索引设计
- Java 4种方法实现选择排序算法