First I was stuck at what represent state of ' Add all except I '. But after checking editorial, it's simply inverted Coin change problem.
#include <cmath>#include<cstdio>#include<vector>#include<iostream>#include<algorithm>using namespacestd;#defineMOD 1000000007#defineMax_val 2000intMain () {//Coin Change Problemvector<int>dp (Max_val, MOD); dp[0] =0; for(inti =0; i < Max_val; i + +) { if((i +1) <max_val) {Dp[i+1] = Std::min (Dp[i +1], Dp[i] +1); } if((i +2) <max_val) {Dp[i+2] = Std::min (Dp[i +2], Dp[i] +1); } if((i +5) <max_val) {Dp[i+5] = Std::min (Dp[i +5], Dp[i] +1); } } intT CIN >>T; while(t--) { //Get Input intN CIN >>N; Vector<int>inch(n); for(inti =0; I < n; i + +) Cin>>inch[i]; intMN = *std::min_element (inch. Begin (),inch. End ()); intSteps =MOD; for(intv =0; V <= mn; V + +) { intAns =0; for(Auto e:inch) ans+ = Dp[e-v]; Steps=std::min (steps, ans); } cout<< Steps <<Endl; } return 0;}
View Code
Lesson learnt: A lot complex scenarios can is transformed into simpler ones.
Hackerrank-"Equal"