DP动态规划问题(1)
来源:互联网 发布:网络拒绝接入,连接失败 编辑:程序博客网 时间:2024/05/18 20:09
1.数字三角形问题
解题思路:
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);
记忆递归型动归程序:
int D[MAX][MAX] ;int n;
int maxSum(int i,inj)
{
if (maxSum[i][j]!=-1)
return maxSum[i][j];
if (i==n) maxSum[i][j]=D[i][j];
else{int x=MaxSum(i+1,j);
int y=MaxSum(i+1,j+1);
maxSum[i][j]=max(x,y)+D[i][j];
}
return maxSum[i][j];
int main ()
{
int i,j;
cin>>n;
for (i=1;i<=n;i++)
for (j+;j<=i;j++){cin>>D;
maxSum[i][j]=-1;
}
cout <<MaxSum(1,1)<<endl;}
人人为我递推型动归解题思路
for (int i=1;i<=n;++i)
maxSum[n][i]=D[n][i];
for (int i=n-1;i>=1;--i)
for(int j=1;j<=i;++j)
maxSum[i][j]=max(maxSum[i+1][j],maxSum[i+1][j+1])+D[i][j];
空间优化(没必要用二维数组来存储可以使用一维数组,甚至可以看maxSum数组都不用
,直接用第n行来代替maxSum主要是为了节省空间,时间复杂度不变)
解题思路:
int *maxSum;
maxSum=D[n];
递归道动归的转化思想:
递归函数有几个参数就定义一个nw维的数组,数组的下表是递归函数残念书的取值范围,
数组元素的元素就是函数的额返回值,如此就可以从边界值开始填充数组
所以动态规划的解题思路就是将原问题分解为子问题,并确定状态和一些初始状态(边界值),
最后确定状态转移方程。因此,动态规划解决的问题具有最优子结构性质以及无后效性。
0 0
- DP动态规划问题(1)
- 动态规划 DP问题
- 【动态规划】背包问题 - dp
- DP动态规划问题 1300
- DP(动态规划)背包问题
- 动态规划 DP 1
- 01背包问题(动态规划DP)
- 【DP问题集】动态规划试题
- 动态规划-3005-经典dp问题
- 01背包问题--dp动态规划
- Dynamic Programming 动态规划问题 DP
- 动态规划 DP leetcode403 青蛙过河问题
- 多重部分和问题-DP动态规划
- 动态规划(DP)问题分析汇总
- DP动态规划-电路布线问题
- 01背包问题(动态规划DP)
- HDOJ1574 RP问题 动态规划 简单DP
- dp 数塔 经典动态规划问题
- sql server中char nchar nvarchar varchar
- C++ 复习
- 软件工程第二次作业(2)
- 达内学习日志Day29:基础查询
- hdu 1548 A strange lift(BFS)
- DP动态规划问题(1)
- 文章标题
- win10正式版关机内存不能读和开机画面卡死问题解决
- jar和so
- 与众不同的二叉树遍历实现
- Laravel初体验
- MySQL 数据库信息
- MySQL数据类型
- Eclipse代码追踪功能