当前位置: 首页 > article >正文

每日OJ_牛客_过桥_贪心+BFS_C++_Java

目录

牛客_过桥_贪心+BFS

题目解析

C++代码

Java代码


牛客_过桥_贪心+BFS

过桥

描述:
        dd被困在了一个迷幻森林,现在她面前有一条凶险的大河,河中央有n个神奇的浮块,浮块按1∼n1顺序标号,但两两并不相接,第i个浮块上有一个数字a[i],可能是正数,也可能是负数,每块浮块都附带一个魔法结界用于传送,当a[i]a[i]a[i]为正数时,dd可以选择传送到第i+k(1≤k≤a[i])个浮块上,当dd抵达n号浮块时才可以顺利脱身,显然不管a[n]是多少,都没有任何意义,当a[i]为负时,dd只能选择标号小于等于i+a[i]的任意一块浮块进行传送,当i+a[i]<1时,默认只能传送到1的位置,每次传送都会花费1s的时间,随着时间的流逝,迷雾森林的空气会被逐渐榨干,她现在在1号浮块,她想知道,她最快多久能顺利脱身,如果始终无法逃脱,请输出−1

输入描述:

第一行一个数n(2≤n≤2000)

接下来一行n个数a[i](1≤|a[i]|≤2000)表示浮块上的数字

输出描述:

输出一行,表示对应的答案


题目解析

类似层序遍历的思想:


C++代码

#include <iostream>
using namespace std;
const int N = 2010;
int n;
int arr[N];

int bfs()
{
    int left = 1, right = 1;
    int ret = 0;
    while(left <= right)
    {
        ++ret;
        int r = right;
        for(int i = left; i <= right; ++i)
        {
            r = max(r, arr[i] + i);
            if(r >= n)
                return ret;
        }
        left = right + 1;
        right = r;
    }
    return -1;
}

int main()
{
    cin >> n;
    for(int i = 1; i <= n; ++i)
    {
        cin >> arr[i];
    }
    cout << bfs() << endl;
    return 0;
}

Java代码

import java.util.*;
public class Main
{
    public static int n;
    public static int[] arr = new int[2010];

    public static int bfs()
    {
        int left = 1, right = 1;
        int ret = 0;
        while(left <= right)
        {
            ret++;
            int r = right;
            for(int i = left; i <= right; i++)
            {
                r = Math.max(r, arr[i] + i);
                if(r >= n)
                {
                    return ret;
                }
            }
            left = right + 1;
            right = r;
        }
        return -1;
    }

    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        for(int i = 1; i <= n; i++)
        {
            arr[i] = in.nextInt();
        }

        System.out.println(bfs());
    }
}

http://www.kler.cn/a/582830.html

相关文章:

  • Next.js介绍(React框架)
  • 2025年第十届数维杯大学生数学建模挑战赛参赛规则
  • 卷积神经网络(笔记02)
  • 总结数据链路层相关知识
  • SpringSecurity快速入门(QuickStart)
  • 《C++探幽:运算符重载》
  • SelectDB 实时分析性能突出,宝舵成本锐减与性能显著提升的双赢之旅
  • 【计算机网络】深入解析 HTTP 中的 GET 方法、POST 方法和 GET 和 POST 的区别
  • Ateme在云端构建可扩展视频流播平台
  • Linux进程观:简单性如何成就强大性(六)
  • Docker 数据持久化核心:挂载(Mounts)与卷(Volumes)的区别与选择指南
  • 【C++基础六】类和对象—中(构造和析构函数)
  • 服务器数据恢复—预防服务器故障,搞定服务器故障数据恢复
  • 网络安全基础知识:从零开始了解网络安全
  • 通过Git从误切换中恢复未保存的文件
  • 个人学习编程(3-12) 刷题
  • K8S学习之基础二十七:k8s中daemonset控制器
  • C# Enumerable类 之 集合操作
  • 【设计模式】遍历集合的艺术:深入探索迭代器模式的无限可能
  • hive 中优化性能的一些方法