fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=5e3+2;
  4. int n,frq[N],memo[N][N];
  5.  
  6. //mx should be mex value
  7. int call(int cnt,int mx=5)
  8. {
  9. if(!cnt || !mx)return 0;
  10. int ans=memo[cnt][mx];
  11. if(ans!=-1)return ans;
  12. ans=cnt*mx;
  13. for(int i=0;i<mx;i++){
  14.  
  15. ans=min(ans,max(0,mx*(frq[i]-1))+i+call(n-frq[i],i));
  16. }
  17. return memo[cnt][mx]=ans;
  18.  
  19. }
  20. set<int>mex;
  21. int main()
  22. {
  23. int tc;cin>>tc;
  24. while(tc--){
  25. cin>>n;
  26. int a[n];
  27. for(int i=0;i<n;i++){
  28. cin>>a[i];
  29. if(a[i]<=n){
  30. frq[a[i]]++;
  31. }
  32. mex.insert(a[i]);
  33. }
  34. cout<<call(n)<<endl;
  35. }
  36.  
  37. }
  38.  
Success #stdin #stdout 0.01s 5460KB
stdin
0
stdout
Standard output is empty