当前位置:   article > 正文

贪心算法-跳跃问题_贪心法求解跳跃问题

贪心法求解跳跃问题

给定一个非负整数数组,假定你的初始位置为数组第一个下标。

数组中的每个元素代表你在那个位置能够跳跃的最大长度。

请确认你是否能够跳跃到数组的最后一个下标。

例如:A = [2,3,1,1,4]A=[2,3,1,1,4] 能够跳跃到最后一个下标,输出true

A = [3,2,1,0,4]A=[3,2,1,0,4] 不能跳跃到最后一个下标,输出false

输入格式

第一行输入一个正整数 n(1 \leq n \leq 500)n(1n500),接下来的一行 nn 个整数,输入数组 A_iAi

输出格式

如果能跳到最后一个下标,输出true,否则输出false

样例输入
5
2 0 2 0 1
样例输出

true

分析:需要注意的一点是:只要跳跃到值为0的位置时,跳跃就会停止,如果此时不能到达最后的数组下标,那就不能跳跃到最后的数组下标位置了。

  1. #include <iostream>
  2. using namespace std;
  3. /*
  4. */
  5. int main()
  6. {
  7. int n,a[501],f;
  8. cin>>n;
  9. for(int i=0;i<n;i++)
  10. cin>>a[i];
  11. if(n==1)
  12. cout<<"true"<<endl;
  13. else if(a[0]==0)
  14. cout<<"false"<<endl;
  15. else
  16. {
  17. n--; //最后一个元素不需要检验
  18. for(int i=1;i<n;i++)
  19. {
  20. if(a[i]==0) //检验a[1]~a[n-2]中所有等于0的元素
  21. {
  22. f=0;
  23. for(int k=i-1;k>=0;k--) //对每个在等于0的a[i]进行检验,判断是否能够跳过
  24. {
  25. if(k+a[k]>i) //如果位置i前有能够跳过a[i]的存在
  26. {
  27. f=1;
  28. break;
  29. }
  30. }
  31. if(f==0) //如果如果位置i前没有能够跳过a[i]的存在,不符合题意直接结束程序
  32. {
  33. cout<<"false"<<endl;
  34. return 0;
  35. }
  36. }
  37. }
  38. cout<<"true"<<endl;
  39. }
  40. return 0;
  41. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/518736
推荐阅读
相关标签
  

闽ICP备14008679号