9.1数字三角形
来源:互联网 发布:php 随机红包算法 编辑:程序博客网 时间:2024/05/18 02:08
9.1.1问题描述与状态定义
回溯法过于麻烦,为了得到高效的算法,需要用抽象的方法思考问题:把当前的位置(i,j)看出一个状态,然后定义状态(i,j)的指标函数d(i,j)为从格子(i,j)发出时能得到的最大和(包括格子(i,j)本身的值)。在这个状态定义下,原问题的解是d(1,1)
状态转移方程
d(i,j)=a(i,j)+max{d(i+1,j),d(i+1,j+1)}
9.1.2记忆化搜索与递归
方法一:递归计算
int solve(int i,int j){ return a[i][j]+(i==n?0:max(solve(i+1,j),solve(i+1,j+1)));}这样做虽然正确,可是时间效率低,在于重复计算,同样的子问题倍计算了很多次
方法二:递推计算
int i,j;for(j=1;j<=n;j++) d[n][j]=a[n][j];for(i=n-1;i>=1;i--) for(j=1;j<=i;j++) d[i][j]=a[i][j]+max(d[i+1][j],d[i+1][j+1]);时间复杂度为 N*N;
方法3:记忆化搜索
程序分成两个部分,首先用“memset(d,-1,sizeof(d));” 把d全部初始化为-1,然后编写递归函数
int solve(int i,j){ if(d[i][j]>=0) return d[i][j]; return d[i][j]=a[i][j]+(i==n?0:max(solve(i+1,j),solve(i+1,j+1)))}
0 0
- 9.1数字三角形
- 9.1数字三角形
- 数字三角形!
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- 数字三角形
- Java中int,String,Integer之间如何互相转化
- AOP的实际应用
- QGraphicsScence Qt场景类
- Duilib vs调试程序加载资源失败,但是单独执行exe可以成功
- 编译器警告C4930
- 9.1数字三角形
- php 去除数组中的某个元素
- acpi event
- 关于OJ上STL库使用的一点经验记录
- Unity3D-关于动态生成的Button和ScrollView冲突的解决方案
- Python实现基本排序算法01
- Windows Container 和 Docker:你需要知道的5件事
- 企业应用交付解决方案【ANS SOLUTIONS】
- Android 平台架构