LeetCodeジャンピングゲーム(ダイナミックプログラミングアルゴリズムのタイトル)

私は記録する別のアルゴリズムの擬似コードで、ブログの内容に着手
ブログの首長
ここに画像を挿入説明
動的なアルゴリズムのためのコンテンツを、実際には、それはこのような内容の既知の位置から前後にプッシュすること、であるボトムアッププロセスであり、我々はポイントの終了前に、そのステップを押し戻すために始めることができるようにタイトルのように、我々は、フォーカスを知っています。アイデアは、この位置の終わりをマークする最初の必要性が正しいこと、およびその後、場所の前端からforループを開始し、最後にその位置のステップ数を決定しますです、達することができます。

#include <stdio.h>
#include <stdlib.h>
//以下是伪代码
//首先是一个记录每一步的步数和位置的数组,数组下标是位置,数组里内容是步数
int a[100];
//其次便是一个dp的数组,来判断这个位置可不可以到达终点
int dp[100];
//然后就开始写方法
bool  jum_can(a){
    dp[len(a)-1]=1;//先标记终点这个位置是可以到终点的(也就是已知解)
    for(int i=len(a)-2;i>=0;i--){//从后往前推
        //先判断能走的最长的步数
        int long_step=min(len(a)-1,a[i]+i);//也就是数组长度减一和当前位置加上当前位置的步数
        //进行步数内的第二次循环,判断能不能到达
        for(int j=0;j<=long_step;j++){
            if(dp[j+a[i]==1)//说明当前位置加上步数是能到达的
            {
                dp[i]=1;//如果那个步数能达到,就说明这个位置能达到
            }
        }
    }
    if(dp[0]==1){//就是第一个位置能不能达到
        return true;
    }
    else
        return false;
}

//最后在主函数处
int main()
{
    //创建数组并输入数组数据
    int a[100];
    //(跳过输入部分)
    if(jum_can(a))//从0开始
        printf("可以到达");
    else
        printf("不可以到达")return 0;
}

公開された72元の記事 ウォンの賞賛5 ビュー2831

おすすめ

転載: blog.csdn.net/qq_41115379/article/details/104838037