Bootstrap

数塔问题(最大值路径)

#include <bits/stdc++.h>
using namespace std;

int a[200][200];
int bk[200][200];
int n,m;

int dfs(int x,int y){
    if(x==n){//找到最下面一层,停止寻找
        return bk[x][y]=a[x][y];
    }
    if(bk[x][y])//记忆化搜索,已经找到最大值的点不再向下找
        return bk[x][y];

   return bk[x][y]=a[x][y]+max(dfs(x+1,y),dfs(x+1,y+1));

}
void bfs(int x,int y){
    if(x>n)//找完了
        return;
    cout<<y<<" ";//x行第y个数
    if(bk[x+1][y]>bk[x+1][y+1])//最大值路径只会在最大值的下面和右下
        bfs(x+1,y);
    else
        bfs(x+1,y+1);
    return ;
}
int main(){

    cin>>n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=i;j++)
            cin>>a[i][j];
    cout<<"最大值:"<<endl;
    cout<<dfs(1,1)<<endl;
    cout<<"最大值路径:"<<bfs(1,1)<<endl;
    return 0;
}
;