
//存在型动态规划
#include<iostream>
#include<cstdio>
using namespace std;
int n, step[100];//n:最大距离,step[i]:在 i 处的最大步数
int main() {
cin >> n;
int f[100]; //f[i]:是否可以来到 i 处
for (int i = 0;i < n;i++) cin >> step[i];
f[0] = 1;//初始化(首位置一定可以来到)
for (int i = 0;i < n;i++) {
for (int j = 0;j < i;j++) {
if (f[j] && j + step[j] >= i) {//可以来到 j 并且可以从 j 跳到 i 时
f[i] = 1;break;//就可以来到 i
}
}
}
if (f[n - 1] == 1) cout << "Yes";
else cout << "No";
return 0;
}


这段代码展示了如何运用动态规划解决一个存在性问题。给定一个最大距离n和每个位置的最大步数,判断是否能从起始位置到达终点。通过初始化和双重循环更新状态数组f,如果f[n-1]为1,则表示可以到达终点,输出Yes,否则输出No。
8956

被折叠的 条评论
为什么被折叠?



