bool miHomeGiftBag(vector < int > p, int M, int idx) { if (M<0 || (idx<0 && M>0)) return false; else if (M==0) return true; else { for (int i=idx;i>=0;--i) { if (miHomeGiftBag(p, M-p[i], i-1)) return true; } return false; } }