NC229296. 过桥
描述
输入描述
第一行一个数n(2≤n≤2000)
接下来一行n个数a[i](1≤|a[i]|≤2000)表示浮块上的数字
输出描述
输出一行,表示对应的答案
示例1
输入:
4 2 2 -1 2
输出:
2
说明:
1跳到2,1s示例2
输入:
2 -1 -2
输出:
-1
C++ 解法, 执行用时: 4ms, 内存消耗: 428K, 提交时间: 2021-11-05 19:56:24
#include<bits/stdc++.h> using namespace std; int n,a[2005],dp[2005]; int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; memset(dp,0x3f,sizeof(dp)); dp[n]=0; for(int i=n-1;i>0;i--) { for(int j=1;j<=a[i];j++) dp[i]=min(dp[i],dp[min(n,i+j)]+1); } if(dp[1]>n) dp[1]=-1; cout<<dp[1]; return 0; }
Python3 解法, 执行用时: 47ms, 内存消耗: 5788K, 提交时间: 2022-10-12 23:05:52
n = int(input()) a = list(map(int, input().split())) l , r , ans = 0 , 0 , 0 while r >= l: ans += 1 newl = r + 1 for p in range(l, r + 1): if p + a[p] >= n - 1: print(ans) exit() r = max(r, p + a[p]) l = newl print(-1)