习题:Redistricting (单调队列)

习题:

奶牛们的最大城市Bovinopolis正在重新划分势力范围—生活在那里的主要是两个品种的奶牛(Holsteins和Guernseys),他们之间始终都有争执,因为两种奶牛都希望自己能在Bovinopolis的政府中保持足够的影响力。

Bovinopolis的大都市区域由N(1≤N≤3*1e5)个牧场组成,每个牧场包含一头奶牛,她可以是Holsteins,也可以是Guernseys。

Bovinopolis政府希望将大都市区划分为若干个相邻的区域,每个区域最多包含K个牧场(1≤K≤N),每个牧场都恰好只包含在一个区域内。由于目前Bovinopolis政府由Holsteins牛控制,因此,他们希望找到一种重新划分的方法,使得Guernseys牛占多数或两种牛相当的区域尽可能的少(如果Guernseys的数量和Holsteins的数量相同,则认为是两种牛相当)。

有一个关心政治的Guernseys牛的联盟想知道政府的计划会对她们造成多少的伤害,希望你帮助她们计算出Guernseys牛占优或实力相当的区域最小可能的数量。

输入格式

第一行输入2个数字N和K,表示牧场的数量和每个区域最多的牧场数。

第二行输入N个只包含H和G的字符串,表示第i个牧场由Holsteins牛或Guernseys牛控制的牧场。

输出格式

输出Guernseys牛占优或均势的最小分区数量。

样例

样例输入

7 2
HGHGGHG

样例输出

3

思路:
首先如何考虑以O(1)的时间复杂度求出一个区域块里G牛是否占优或者相等,显而易见,将G牛转换成1,H牛转换成-1,用前缀和来求。明白这点之后,DP呼之欲出,但是用纯DP时间复杂度即为O(n^2),虽然时间比起爆搜好了很多,但依旧不能A掉这道题,考虑将DP进行优化,原DP为:dp[i]=min(dp[j]+(s[i]-s[j])>=1?1:0),显而易见,后面一串内容可以使用单调队列来维护(因为作者太懒使用了优先队列)

代码:
 

#include<bits/stdc++.h>
using namespace std;
int n,k,summ[300005],dp[300005];
string s;
struct node
{
	int x,y;
	bool operator < (const node &t) const
	{
		if(x==t.x) return summ[y]>summ[t.y];
		else return x>t.x;
	}
} p;
priority_queue<node>q;
int main()
{
	// freopen("redistricting.in","r",stdin);
	// freopen("redistricting.out","w",stdout);
	cin>>n>>k>>s;
	for(int i=n; i>=1; i--) 
		s[i]=s[i-1];
	for(int i=1; i<=n; i++)
		summ[i]=s[i]=='H'?summ[i-1]+1:summ[i-1]-1;
	memset(dp,0x3f,sizeof(dp));
	dp[0]=0;
	p.x=0;
	p.y=0;
	q.push(p);
	for(int i=1; i<=n; i++)
	{
		while(!q.empty()&&q.top().y<i-k) 
			q.pop();
		dp[i]=summ[i]-summ[q.top().y]<=0?q.top().x+1:q.top().x;
		p.x=dp[i];
		p.y=i;
		q.push(p);
	}
	cout<<dp[n];
	return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值