zoukankan      html  css  js  c++  java
  • 蓝桥杯 蚂蚁爬楼梯 递归解最短路程问题(优化搜索算法(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); //
    }
    
  • 相关阅读:
    TCP/IP||ARP/RARP
    TCP/IP||IP
    TCP/IP||链路层
    Struts||IQ
    SpringMVC||IQ
    TCP/IP Basic
    Spring||Mails
    Spring||Quartz
    jQuery Ajax 方法应用。
    html5的离线储存应用.
  • 原文地址:https://www.cnblogs.com/AmosAlbert/p/12832322.html
Copyright © 2011-2022 走看看