ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2020.02.13普及C组模拟赛6(第二题)

2020-02-27 19:45:08  阅读:298  来源: 互联网

标签:13 int 2020.02 普及 long 家族 草坪 罗密欧 普鲁特


2.罗密欧与朱丽叶的约会

题目描述

     农场主约翰养了两群有世仇的牛,它们被称为蒙塔戈斯家族和卡普鲁特家族。蒙塔戈斯家族的成员,罗密欧,爱上了美丽的朱丽叶,但后者正好是卡普鲁特家族的成员。罗密欧希望与朱丽叶约会,但不希望卡普鲁特家族的其他成员发现(否则会有可怕的事情发生!)

​ 罗密欧和朱丽叶希望在牧场栅栏边一块尽可能大的区域中相见,这样他们可以边散步边聊天。然而,这块区域中不应该有太多的卡普鲁特家族成员,否则,他们俩被发现的机会就会大得多。罗密欧发现在整个牧场栅栏边有P块草坪呈直线排列(1<=P<=1000),在这些草坪上总共有N位卡普鲁特家族的成员在吃草(1<=N<=1000)。每个卡普鲁特家族的成员在一些相邻的草坪上吃草。现在,罗密欧求助于聪明的你,希望你能找出一个最大的范围(指一些相邻的草坪),在这个范围的草坪中,至多有C(1<=C<=1000〉位卡普鲁特家族的成员在吃草。

输入

第一行,包含三个整数:N,P,C

第二至N+1行:每行包括一个整数X(1<=X<=P-1),代表一个卡普鲁特家族成员在栅栏边的第X和X+1块草坪之间吃草,多个卡普鲁特家族成员可以在同一块草坪内一起吃草。

输出

只有一行:一个整数,代表一个最大的草坪范围(指这些草坪的块数),在这个范围内最多只有C个卡普鲁特家族的成员在吃草。

样例输入

2 6 1

2

3

(解释:栅栏边的草坪分为六块:1 2 3 4 5和6。有两个卡普鲁特家族成员,一个在第二和第三块草坪上吃草,一个在第三和第四块草坪上吃草)

样例输出

3

(解释:在第四块至至第六块草坪间只有一个卡普鲁特家族的成员在吃草)

数据范围限制

1<=P<=1000

1<=N<=1000

1<=C<=1000

正解
这题如果我们用暴力,就会超时。所以,我们只能用DP来解决问题。
假设f[i]=从1到i中,卡普鲁特家族的个数(要用到前缀和)

for(int i=1;i<=p;i++)
	 f[i]=f[i-1]+(a[i]-b[i]);//要记得减去,不然羊的个数会增多 

最后再用一个循环,找到最大值就OK了

for(long long i=1;i<=p;i++)//下面是dp
	 for(long long j=1;j<i;j++)
	  if(f[i]-f[j]<=c){m=max(m,i-j);}

AC代码

#include<iostream>
#include<cstdio>
using namespace std;
long long n,p,c,x,m,a[1005],b[1005],f[1005];
int main()
{
	freopen("meet.in","r",stdin);
	freopen("meet.out","w",stdout);
	cin>>n>>p>>c;
	for(int i=1;i<=n;i++)
	{
		cin>>x;
		b[x]++;
		a[x]++;a[x+1]++;//可以在两个区域中走动
	}
	for(int i=1;i<=p;i++)
	 f[i]=f[i-1]+(a[i]-b[i]); //要记得减去,不然羊的个数会增多
	for(long long i=1;i<=p;i++)//下面是dp
	 for(long long j=1;j<i;j++)
	  if(f[i]-f[j]<=c){m=max(m,i-j);}
	cout<<m;   
	return 0;
}

下面附本次比赛的其他题目

谢谢观看

SSL_李恪佳 发布了55 篇原创文章 · 获赞 83 · 访问量 1750 私信 关注

标签:13,int,2020.02,普及,long,家族,草坪,罗密欧,普鲁特
来源: https://blog.csdn.net/weixin_45524309/article/details/104542969

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有