博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj1163 数字三角形 (动态规划)
阅读量:6679 次
发布时间:2019-06-25

本文共 1536 字,大约阅读时间需要 5 分钟。

试题链接:

1.记忆递归型(自顶向下)
D[i][j]来存数字
典型的递归问题:D(r,j)出发,下一步只能走D(r+1,j)或者D(r+1,j+1).故对于N行的三角形:
if(r==N)
 MaxSum(r,j)=D(r,j)
else
 MaxSum(r,j)=max(MaxSum(r+1,j),MaxSum(r+1,j+1))+D(r,j)用ans[i][j]来存计算出的结果,避免重复计算

#include 
using namespace std;#define MAX 101int D[MAX][MAX];int ans[MAX][MAX];int n;int MaxSum(int i,int j){ if(ans[i][j]!=-1) return ans[i][j]; if(i==n) ans[i][j]=D[i][j]; else ans[i][j]=max(MaxSum(i+1,j),MaxSum(i+1,j+1))+D[i][j]; return ans[i][j];}int main(){ cin>>n; for(int i=1; i<=n; i++) { for(int j=1; j<=i; j++) { cin>>D[i][j]; ans[i][j]=-1; } } cout<
2.循环递推法(自底向上)

#include 
using namespace std;#define MAX 101int D[MAX][MAX];int ans[MAX][MAX];int n;int main(){ cin>>n; for(int i=1; i<=n; i++) //读入数字 for(int j=1; j<=i; j++) cin>>D[i][j]; for(int j=1; j<=n; j++) //先初始化最后一行 ans[n][j]=D[n][j]; for(int i=n-1; i>=1; i--) { for(int j=1; j<=n; j++) ans[i][j]=max(ans[i+1][j],ans[i+1][j+1])+D[i][j]; } cout<
<
空间优化
#include 
using namespace std;#define MAX 101int D[MAX][MAX];int *ans;int n;int main(){ cin>>n; for(int i=1; i<=n; i++) //读入数字 for(int j=1; j<=i; j++) cin>>D[i][j]; ans=D[n]; //ans指向第n行 for(int i=n-1; i>=1; i--) for(int j=1; j<=i; j++) ans[j]=max(ans[j],ans[j+1])+D[i][j]; cout<
<

转载于:https://www.cnblogs.com/zhanyeye/p/9746100.html

你可能感兴趣的文章
专访梭子鱼:以“立体交付”保障Web应用安全
查看>>
微软SQL Server 2012新特性Silverlight报表客户端 - Power View
查看>>
记一次网站收录数和排名的实现
查看>>
pthread_cond_wait()用法分析
查看>>
poj-3368 Frequent values ***
查看>>
Install IIS 7.5 PHP & FastCGI for PHP on Windows 7
查看>>
C#连接Excel示例代码和驱动
查看>>
彻底弄明白之java多线程中的volatile
查看>>
30幅非常漂亮的微距摄影作品欣赏
查看>>
6、关于ctemplate的一个例子
查看>>
Sql Server 锁资源模式详解
查看>>
标准电声系统测试
查看>>
SQLite移植手记
查看>>
volcanol_Linux_问题汇总系列
查看>>
Bing Maps开发扩展一:Oracle Spatial的空间数据渲染
查看>>
HTTP中Keep-Alive(长连接)的一些说明
查看>>
apache2.4.1+mysql5.5.21+php5.4.0安装实践(二)
查看>>
LintCode 最大正方形
查看>>
python三方库之requests-快速上手
查看>>
图像工具包VintaSoftImaging.NET SDK v8.5,新增独立web服务
查看>>