// n<=1000 m<=20 1<=k<m
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1005;
int a[MAXN],dp[MAXN][MAXN];
map<int,int> mp;
int main(){
int n,m,lim;
cin >> n >> m >> lim;
for (int i=1;i<=n;i++)
cin >> a[i];
int cnt=0;
for (int i=1;i<=n;i++){
if (mp.size()==lim and mp[a[i]]==0){
cnt++;
mp.clear();
}
mp[a[i]]++;
}
cnt++;
cout << cnt << endl;
for (int i=0;i<=1001;i++)
for (int j=0;j<=1001;j++)
dp[i][j]=1e9;
dp[0][0]=0;
for (int j=1;j<=cnt;j++)
for (int i=j;i<=n;i++){
mp.clear();
for (int k=i;k>=1;k--){
mp[a[k]]++;
if (mp.size()>lim) break;
dp[i][j]=min(dp[i][j],dp[k-1][j-1]+int(mp.size()));
}
}
cout << dp[n][cnt];
return 0;
}
心态调崩了(半夜写的,状态不行,制杖错误别喷)