动态规划——candy

题目描述

n个小朋友站成一排,根据他们的得分分发糖果,得分高的小朋友要比旁边得分低的小朋友得到的糖果多,每个小朋友至少得到一枚糖果,问最少要准备多少糖果?

方法:

先从左到右扫描一遍,使得右边比左边得分高的小朋友糖果数比左边多1(尽可能的少);

再从右到左扫描一遍,使得左边比右边得分高的小朋友糖果数比右边多(这里要注意,从右向左比较时,只有当左边小朋友比右边的分高且得到的糖果少于等于右边时,b[i]=b[i+1]+1;否则不更新b[i]。)

public int candy(int[] ratings) {
        if(ratings == null||ratings.length == 0)
            return 0;
        //b[i]存放第i个小孩得到的糖果数;
        int []b=new int[ratings.length];
        //从左向右分糖果:
        for(int i=0;i<ratings.length;i++)
            {
            if(i==0||ratings[i]<=ratings[i-1])
                {
                b[i]=1;
            }else
                {
                b[i]=b[i-1]+1;
            }
        }
    //从右向左比较:只有当左边小朋友比右边的分高且得到的糖果少于等于右边时,b[i]=b[i+1]+1;否则不更新b[i];
        for(int i=b.length-2;i>=0;i--)
            {
            if(ratings[i]>ratings[i+1])
                {
                if(b[i]<=b[i+1])
                b[i]=b[i+1]+1;
            }
        }
        //对b[]求和即为总糖果数;
        int sum=0;
        for(int i:b)
            {
            sum+=i;
        }
        return sum;
    }


### YOLOv8 中 Candy 算子的边缘检测实现与应用 YOLOv8 是一种先进的目标检测框架,其设计旨在提高速度和准确性的同时保持较低的计算复杂度。Canny 边缘检测器(通常称为 Canny Operator)是一种多阶段的算法,广泛应用于图像处理领域以识别清晰的边界[^1]。 #### 1. **Canny 算子简介** Canny 边缘检测的核心在于通过一系列操作来提取图像中的显著特征边线。这些操作包括高斯滤波平滑、梯度强度计算以及非极大值抑制等步骤。最终输出的是二值化后的边缘图,在该图上只有被认定为边缘的位置会被标记出来[^2]。 #### 2. **YOLOv8 的架构特点及其扩展能力** 虽然原始版本的 YOLO 并未直接集专门针对边缘增强的功能模块,但在实际开发过程中可以通过自定义层或者预/后处理的方式引入额外的技术手段如 Canny 运算符支持更精确的目标定位需求场景下使用[^3]。 对于某些特定应用场景而言——比如自动驾驶汽车感知系统当中需要特别关注车道线这类细长形物体时,则可以考虑将传统计算机视觉方法论融入现代深度学习模型之中形混合解决方案;其中就可能涉及到利用像 Canny 这样的经典边缘探测技术作为辅助工具之一来进行前期据准备或者是后期结果优化工作[^4]。 以下是基于 PyTorch 实现的一个简单例子展示如何在训练前加载图片并对其进行基本形态学变换后再送入网络主体部分继续后续流程: ```python import cv2 from ultralytics import YOLO def preprocess_with_canny(image_path, model): img = cv2.imread(image_path) gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) edges = cv2.Canny(gray_img, threshold1=100, threshold2=200) results = model(edges[:, :, None].repeat(3, axis=-1)) # Convert to RGB-like format return results model = YOLO('yolov8n.pt') # Load a pretrained model (recommended for best performance) results = preprocess_with_canny("path_to_image.jpg", model=model) ``` 上述脚本展示了怎样先调用 OpenCV 库完灰阶转换加双阈值设定下的轮廓捕捉动作之后再把得到的新表征形式传递给已实例化的 yolov8 对象执行预测任务[^5]。 需要注意的是这里仅提供了一个非常基础的概念验证型示范而已,并不代表正式生产环境里的最佳实践方式。具体到项目内部则应当依据实际情况调整参配置甚至重新构建适配各自业务逻辑的独特管道结构才行。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值