Part0 题目描述
即寻找最优路径并输出所有路径总和
Part1 解决办法
将此问题抽象为完全二叉树,即每一个小二叉树左右节点均确定有值。动态规划问题思路之一:从顶向下思考,从底向上实现。
所以从第四层开始判断:
节点为2时:只有4和5;
节点为7时,只有5和2;
节点为4时,只有2和6;
节点为4时,只有6和5;
依次再考虑上面层,大佬可能已经想到了,就是for嵌套嘛。
Part2 源代码参考:
#include<bits/stdc++.h>
int data[1005][1005];//原始矩阵
int media[1005][1005];//动态规划表
//这么大的数组放在局部变量中会闪退,所以放全局变量
int maxdata(int a,int b){
if(a>b){
return a;
}else{
return b;
}
}
int main(){
int n,result=0;//n表示行数,result表示每次比较之后较大值
scanf("%d",&n);
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
scanf("%d",&data[i][j]);
}
}
for(int i=0;i<n;i++){
media[n-1][i] = data[n-1][i];
}
for(int i=n-2;i>=0;i--){
for(int j=0;j<=i;j++){
result = maxdata(media[i+1][j],media[i+1][j+1]);
media[i][j] = result+data[i][j];
}
}
printf("%d",media[0][0]);
return 0;
}
运行结果:
出现这个页面巨爽无比(新手开局,大佬勿喷)
更多练习:
洛谷动态规划题单