跳跃游戏-计蒜课
来源:互联网 发布:战千雄源码 编辑:程序博客网 时间:2024/05/17 09:30
题目:输入数组,数组元素表示该处可跳跃的最大长度,求是否可以从第一个元素到达最后一个元素,若可到达最求出最少的跳跃次数
分析:判断是否可跳到最后,dp[i]=max(dp[i-1],i+arr[i]) (i<dp[i-1])注:dp[i]表示第一个元素通过前i个元素跳跃的最大长度
判断最少跳跃次数,dp[i]=min(dp[j]+1,dp[i]) (i<j<=i+arr[i]) 注:dp[i]表示第i个元素到最后元素跳跃的最少次数
说明:从第一个元素[0]跳跃到最后一个元素[n-1],跳跃长度>=n-1,而非n
/*跳跃游戏-是否可跳跃到最后一个元素*/#include <iostream>using namespace std;int arr[502],n;int canjump(){ int global=0,local=0; for(int i=0;i<n;i++) { if(global<i) return 0; global=max(global,i+arr[i]); } if(global>=n-1) return 1; else return 0;}int main(){ while(cin>>n) { for(int i=0;i<n;i++) cin>>arr[i]; if(canjump()==1) cout<<"true"; else cout<<"false"; }}
/*跳跃游戏二-求跳跃到最末元素最少的次数*/#include <iostream>using namespace std;int n,arr[502],dp[502];int main(){ cin>>n; for(int i=0;i<n;i++) { cin>>arr[i]; dp[i]=0xFFFF; } dp[n-1]=0; for(int i=n-2;i>=0;i--) { int k=i+arr[i]; for(int j=i+1;j<=k&&j<n;j++) { dp[i]=min(dp[i],dp[j]+1); } } cout<<dp[0]<<endl;}
0 0
- 计蒜课--跳跃游戏
- 跳跃游戏-计蒜课
- 计蒜课 跳跃游戏
- 【计蒜课】跳跃游戏二
- 跳跃游戏
- 跳跃游戏
- 跳跃游戏
- 跳跃游戏
- 跳跃游戏
- 跳跃游戏
- 跳跃游戏
- 跳跃游戏
- 跳跃游戏
- lintcode--跳跃游戏--跳跃游戏Ⅱ
- 跳跃类游戏
- 计蒜客018-跳跃游戏
- LintCode-跳跃游戏
- lintcode-跳跃游戏-116
- Android 适配
- Android自定义View绘制闪闪发光的文字
- C++作业5
- CodeForces 734 D.Anton and Chess(map)
- DAO
- 跳跃游戏-计蒜课
- Mac NSStatusBar
- CodeForces
- Xamarin.android 的pagerview滑动指示器
- JS对HTML进行转义
- iOS 地图坐标系转换
- 《将博客搬至jianshu》
- phpcms v9无法连接数据库服务器,请检查配置
- 栈的基本操作