暴力求解法...
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;
    }
}