题意:
给定 n 个整数 a1,a2,…,an。
现在,请你从中挑选一些数,并将选出的数进行分组。
要求:
- 选出的数最多划分为 k 组(至少 1 组)。
- 同一组内,任意两数之差的绝对值不超过 5。
- 所选出的数尽可能多。
请问,最多可以选出多少个数进行分组?
代码:
#include<bits/stdc++.h>
using namespace std;
int w[5010];
int f[5010][5010];
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&w[i]);
}
sort(w+1,w+1+n);
for (int i = 1, k = 1; i <= n; i ++ )
{
while (w[i] - w[k] > 5) k ++ ;
for (int j = 1; j <= m; j ++ )
f[i][j] = max(f[i - 1][j], f[k - 1][j - 1] + (i - k + 1));
}
printf("%lld\n",f[n][m]);
return 0;
}