对以下数塔,进行动态规划的填表:
数塔问题-动态规划法

对每一个数塔进行求解:
数塔问题-动态规划法

代码:

#include <iostream>
using namespace std;
const int n=5;
int DataTower(int d[n][n])
{
	int maxAdd[n][n]={0},path[n][n]={0};   //maxAdd二维数组存储最大数值  path数组存储确实每一层决策的下标,输出路径信息
	int i,j;
	for(j=0;j<n;j++)       //对初始化,即最底层的值赋给maxAdd[][];
		maxAdd[n-1][j]=d[n-1][j];
	for(i=n-2;i>=0;i--)
		for(j=0;j<=i;j++)
			if(maxAdd[i+1][j]>maxAdd[i+1][j+1])
			{
				maxAdd[i][j]=d[i][j]+maxAdd[i+1][j];
				path[i][j]=j;
			}
			else
			{
                maxAdd[i][j]=d[i][j]+maxAdd[i+1][j+1];
				path[i][j]=j+1;
			}
	cout<<"路径为:"<<d[0][0];
	j=path[0][0];
	for(i=1;i<n;i++)
	{
		cout<<"->>"<<d[i][j];
		j=path[i][j];
	}
	return maxAdd[0][0];
}
void main(){
	int d[n][n]={6,0,0,0,0,16,11,0,0,0,7,10,11,0,0,10,8,11,6,0,5,13,10,15,7};
	int max=DataTower(d);
	cout<<endl;
	cout<<max<<endl;
}

maxAdd数组最后值:
数塔问题-动态规划法
path数组最后值:
数塔问题-动态规划法
运行结果:
数塔问题-动态规划法
时间复杂度:O(n^2)

相关文章: