Comprometo-me em um blog conteúdo, com outro pseudo-código algoritmo para gravar os
chefes de blog de
conteúdo para algoritmo de dinâmica, de fato, é um processo de baixo para cima, ou seja, para empurrar para trás e para a frente a partir da posição conhecida do conteúdo como este como o título, sabemos o foco, para que possamos começar a empurrar para trás esse passo antes do final de um ponto. A idéia é primeiro você precisa para marcar o fim desta posição é correta, e depois iniciar um loop a partir da extremidade dianteira de um local, determinar o número de passos nessa posição até o fim, pode alcançar.
#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;
}