#include #include using namespace std; const int N=5010; int n,k; int a[N]; int sum[N]; int cnt[N]; int main(){ cin>>n>>k; for(int i=1;i<=n;i++) cin>>a[i]; int ans=0; for(int i=1,j=1;i<=n;i++){ while(cnt[a[i]]==0&&j<=i) cnt[a[j++]]--; cnt[a[i]]++; while(sum[i]-sum[j-1]>k){ cnt[a[j]]--; if(cnt[a[j]]==0) sum[j-1]=sum[j-2]; j++; } sum[i]=sum[j-1]+1; ans=max(ans,i-j+1); } cout<<ans; return 0; }

C++ 实现彩带截取算法,最大化颜色数量不超过 K

原文地址: https://www.cveoy.top/t/topic/lHRt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录