袋鼠过河
来源:互联网 发布:2014上半年经济数据 编辑:程序博客网 时间:2024/05/01 17:45
一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳的更远。每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为5,就代表袋鼠下一跳最多能够跳5米,如果为0,就会陷进去无法继续跳跃。河流一共N米宽,袋鼠初始位置就在第一个弹簧上面,要跳到最后一个弹簧之后就算过河了,给定每个弹簧的力量,求袋鼠最少需要多少跳能够到达对岸。如果无法到达输出-1
//暴力解法
package 袋鼠过河;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while(scanner.hasNext()){ int n = scanner.nextInt(); int A[] = new int[n+1]; for(int i=0;i<n;++i) A[i]=scanner.nextInt(); int dp[][]=new int[n+1][n+1]; int vis[] = new int[n+1]; for(int i=0;i<n;++i){ for(int j=1;j<=A[i]&&j<=n;++j){ dp[i][j]=1; vis[j]=1; } } for(int i=1;i<n;++i){ for(int j=i;j<=n;++j){ if(dp[i-1][j]==1){ dp[i][j]=1; for(int l=1;l<=A[j]&&(j+l)<=n;++l){ dp[i][j+l]=1; vis[j+l]=1; } if(A[j]==0) dp[i][j]=0; } } if(dp[i][n]==1){ break; } } /* for(int i=0;i<=n;++i){ for(int j=0;j<=n;++j) System.out.printf(dp[i][j]+" "); System.out.println(); }*/ boolean flag=false; for(int i=1;i<=n;++i){ if(dp[i][n]==1){ System.out.println(i+1); flag=true; break; } } if(!flag){ System.out.println(-1); } } }}
//动态规划解法
#include<stdio.h>#include<algorithm>using namespace std;int a[10005],dp[10005];const int MAX=99999999;int main(){ int N,i,j; while(scanf("%d",&N)!=EOF){ for(i=0;i<10005;i++) dp[i]=MAX; dp[0]=0; for(i=0;i<N;i++) scanf("%d",&a[i]); int step[10005]; for(i=1;i<=N;i++) for(j=0;j<i;j++) if(a[j]+j>=i) dp[i]=min(dp[i],dp[j]+1); printf("%d\n",dp[N]==MAX?-1:dp[N]); }}
阅读全文
1 0
- 袋鼠过河
- 袋鼠过河
- 袋鼠过河问题
- 袋鼠过河问题(DP)
- 搜狐笔试题目一袋鼠过河
- 动态规划之袋鼠过河问题
- 利用贪心算法计算袋鼠过河问题
- 搜狐2017秋招研发工程师笔试 —— 袋鼠过河(贪心、动态规划、转为图)
- 搜狐[编程题] 袋鼠过河.一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个
- 过河
- 过河
- 过河
- 过河
- 过河
- 过河
- 过河
- 过河
- 过河
- 使用freemarker导出word文档包含多张图片
- keras中文文档笔记13——解释CNN的滤波器
- codevs1298 凸包周长 解题报告
- PopuWindow用法
- WCF绑定netTcpBinding寄宿到控制台应用程序
- 袋鼠过河
- oracle增删改查语法
- 【POJ 1094】Sorting it all out (拓扑排序)
- 转载技巧~
- 【微信小程序】Page not found 错误
- 516_fragment不要用构造函数传参数
- 访问修饰符
- Divisible [数学]
- Single Number leetcode java