Nk2219(模拟)

2219: 序列问题

Time Limit: 1000 ms    Memory Limit: 65536 kB  
Total Submit : 111  (30 users)    Accepted Submit : 31  (25 users)    Page View : 380 
Font Style: Aa Aa Aa
现有一长为n的整数列:d1, d2, d3, ......, dn。

求满足下列条件的最长子序列(子序列指连续的若干个数)的长度:

该子序列中最大值与最小值之差不超过k。

Input

输入为多组数据。

每组数据有2行。

第一行是整数n,k (1<=n<=3000,0<=k<=100),第二行有n个整数,第i个表示di (0<=di<=32767)。

Output

每组输入数据输出一行,是满足条件的最长子序列的长度。

Sample Input

6 2
5 3 2 2 4 5

Sample Output

4

Hint

如果不清楚如何处理多组输入,请参照1001题。

Source

Best User : Impetus



简单模拟题,有点动态规划的思想

#include<iostream>
using namespace std;
#define MAX 3000+10
#define min(a,b) a<b?a:b
#define max(a,b) a<b?b:a
int data[MAX];

int main()
{
 int n,m,i,j;
 int max_data,min_data;
 int max_all,len;
 while(cin>>n>>m)
 {
  for(i=0;i<n;i++)
   cin>>data[i];

        max_all=-1;
  for(i=0;i<n;i++)
  {
   min_data=data[i];
   max_data=data[i];
   len=1;
   for(j=i;j<n;j++)
   {
    min_data=min(min_data,data[j]);
    max_data=max(max_data,data[j]);
    if(max_data-min_data>m)
     break;
    len=j-i+1;
   }
   max_all=max(max_all,len);
  }

  cout<<max_all<<endl;

 }
 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值