2219: 序列问题
Time Limit: 1000 ms Memory Limit: 65536 kB
Total Submit : 111 (30 users) Accepted Submit : 31 (25 users) Page View : 380
Time Limit: 1000 ms Memory Limit: 65536 kB
Total Submit : 111 (30 users) Accepted Submit : 31 (25 users) Page View : 380
现有一长为n的整数列:d1, d2, d3, ......, dn。
求满足下列条件的最长子序列(子序列指连续的若干个数)的长度:
该子序列中最大值与最小值之差不超过k。
求满足下列条件的最长子序列(子序列指连续的若干个数)的长度:
该子序列中最大值与最小值之差不超过k。
Input
输入为多组数据。
每组数据有2行。
第一行是整数n,k (1<=n<=3000,0<=k<=100),第二行有n个整数,第i个表示di (0<=di<=32767)。
每组数据有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;
}