https://vjudge.net/contest/396756#problem/C
题意就是选择最长的一个满足题意的递增个数
#include <bits/stdc++.h>
using namespace std;
const int maxx = 5000 + 100;
struct node
{
int point; //记录原始的点
int number; //记录角的个数
} a[maxx];
int dp[maxx];
bool cmp(node b,node c)
{
return b.number<c.number;
}
int main()
{
int n,w;
scanf("%d",&n);
scanf("%d",&w);
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i].number);
a[i].point=i;
}
sort(a+1,a+n+1,cmp);
for(int i=1; i<=n; i++)
{
for(int j=i+1; j<=n; j++)
{ //点的距离不超过w了的情况下dp
if(abs(a[i].point-a[j].point)<=w&&a[i].number!=a[j].number)
{
dp[j]=max(dp[j],dp[i]+1);
}
}
}
int sum=0;
for(int i=1; i<=n; i++)
{
sum=max(sum,dp[i]);
}
printf("%d\n",sum);
return 0;
}