本课程是从少年编程网转载的课程,目标是向中学生详细介绍计构和算法。编程学习最好使用计算机,请登陆 www.3dian14.org (免费注册,免费学习)。
本课继续讲解贪心算法相关的习题:警察抓小偷的经典问题。
假设小偷与警察依次排列成一个队列,规定每名警察只能抓捕一个小偷,而且他能抓捕的小偷与他相邻的距离不能超过k个位置,请找出所有警察能抓到的最多小偷数目。
我们用数组来表示警察和小偷的排成的队列:给定大小为n的数组,其具有以下约束条件:
数组中的每个元素要么是警察(用字母'P'表示)要么是小偷(用字母'T'表示);
每名警察只能抓一个小偷;
一名警察只能抓捕离自己所在位置距离在k以内的小偷,也就是警察只能抓捕与他的数组下标相差小于或等于k的小偷。
下面我们看几个例子:
【例题1】
输入 : arr[] = {'P', 'T', 'T', 'P', 'T'}, k = 1.
输出 : 2(警察最多能抓到2个小偷)
【例题2】
输入 : arr[] = {'P', 'T', 'T', 'P', 'T'}, k = 1