• 蓝桥杯 蚂蚁爬楼梯 递归解最短路程问题(优化搜索算法(MS))


    有一个层数为n(n<=1000)的数字三角形。现有一只蚂蚁从顶层开始向下走,每走下一级,可向左下方向或右下方向走。求走到底层后它所经过数字的总和的最大值。
    【输入格式】
    第一个整数为n,一下n行为各层的数字。
    【输出格式】
    一个整数,即最大值。
    【输入样例 】
    5
    1
    6 3
    8 2 6
    2 1 6 5
    3 2 4 7 6
    【输出样例】
    23
    【样例说明】
    最大值=1+3+6+6+7=23

    递归解代码,点击即可

    在直接递归解的代码中可以发现运行速度是很慢的,这是因为在运行过程中,很多值被反复地计算。其实如果把已经计算出来的值保存起来,下次 用的时候直接那来算,速度会快上很多。这就是所谓的记忆化搜索。

    #include<iostream>
    #define maxn 1001 
    using namespace std;
    
    int a[maxn][maxn],N,total,did[maxn][maxn];
    
    int f(int i,int j)//优化搜索算法
    {
        if(i==N-1)
        return a[i][j];
        if(did[i][j])
        return did[i][j];
        did[i][j]=a[i][j]+max(f(i+1,j),f(i+1,j+1));
        return did[i][j];
    }
    int main(){
        cin>>N;
        for(int i=0;i<N;i++){
            for(int j=0;j<=i;j++){
                cin>>a[i][j];
            }
        }
        cout<<f(0,0); //
    }
    
  • 相关阅读:
    SSL工作原理
    xmlhttprequest对象
    form验证的图片(小技巧)
    C#转码
    引用不了App_Code里的类
    再谈如何成为技术领袖
    如何做好年末总结?
    编程习惯
    软件人员推荐书目(都是国外经典书籍!!!)
    又当爹又当妈的产品经理
  • 原文地址:https://www.cnblogs.com/AmosAlbert/p/12832322.html
Copyright © 2020-2023  润新知