贪心算法几个经典例子_贪心算法(9):警察与小偷问题

本课程是从少年编程网转载的课程,目标是向中学生详细介绍计构和算法。编程学习最好使用计算机,请登陆 www.3dian14.org (免费注册,免费学习)。

本课继续讲解贪心算法相关的习题:警察抓小偷的经典问题。

假设小偷与警察依次排列成一个队列,规定每名警察只能抓捕一个小偷,而且他能抓捕的小偷与他相邻的距离不能超过k个位置,请找出所有警察能抓到的最多小偷数目。

我们用数组来表示警察和小偷的排成的队列:给定大小为n的数组,其具有以下约束条件:

  • 数组中的每个元素要么是警察(用字母'P'表示)要么是小偷(用字母'T'表示);

  • 每名警察只能抓一个小偷;

  • 一名警察只能抓捕离自己所在位置距离在k以内的小偷,也就是警察只能抓捕与他的数组下标相差小于或等于k的小偷。

25ce5a46f827900ac8e19eb15afd6e46.png

2b7981c25f02e8a1687ce2fec56a1c69.png

下面我们看几个例子:

【例题1】

输入 : arr[] = {'P', 'T', 'T', 'P', 'T'},  k = 1.

a3b5732472f5542b1a82c8506a03d372.png

输出 : 2(警察最多能抓到2个小偷)

d1504d85cfb268814f7d3060de70af5c.png

【例题2】

输入 : arr[] = {'P', 'T', 'T', 'P', 'T'},  k = 1

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
贪心算法是一种简单且常用的算法思想,在解决一些优化问题时非常高效。下面是几个经典的使用贪心算法例子: 1. 找零钱问题:假设有一定面额的硬币,如1元、5元、10元、20元等,并且数量无限。现在要找给客户m元的零钱,如何使用最少的硬币数量?贪心算法的思想是从面额最大的硬币开始尽可能多地使用。 2. 区间调度问题:给出一组区间,求解最多能够选择多少个互不重叠的区间。贪心算法的思想是按照区间的结束时间排序,然后依次选择结束时间最早的区间。 3. 最小生成树问题:给出一个无向图,边带有权值,求解一个最小生成树,即含有所有顶点的连通子图并且权值和最小。贪心算法的思想是从一个任意顶点开始,每次选择一条权值最小的边,并且要保证不构成回路。 4. 背包问题:给出一组物品,每个物品有自己的价值和重量,并且背包只能承受一定的重量。现在要选择一些物品放入背包中,使得总价值最大。贪心算法的思想是按照物品的单位价值(价值/重量)排序,然后依次选择单位价值最高的物品放入背包。 以上是几个常见的使用贪心算法经典例子贪心算法虽然简单,但并不一定能够得到全局最优解,它只能得到局部的最优解。因此,在使用贪心算法时需要注意验证其正确性,并且多结合其他算法思想进行优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值