本文主要是介绍一题多解之数塔问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
递归实现:记忆化+深度遍历
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int num[1000][1000],n;//递归实现:记忆化+深度遍历
int dfs(int x,int y){int sum=0;//记录最大情况if(x>n||y>x) return sum;//实现每次都返回最大值else{sum=max(sum,max(dfs(x+1,y),dfs(x+1,y+1))+num[x][y]);return sum;}
}
int main(){cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){cin>>num[i][j];}}cout<<dfs(1,1);return 0;
}
递推实现
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int num[1000][1000],n;
int main(){cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){cin>>num[i][j];}}//递推实现for(int i=n;i>=1;i--){for(int j=1;j<=n;j++){num[i][j]=max(num[i+1][j],num[i+1][j+1])+num[i][j];}}cout<<num[1][1];return 0;
}
这篇关于一题多解之数塔问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!