int shoppingOffers(vector
int ans=0;
for(int i=0;i for(auto &s:special){ if(ans for(int j=0;j if(s[j]>needs[j])goto FLAG; for(int j=0;j ans=min(ans,s.back()+shoppingOffers(price,special,needs)); for(int j=0;j FLAG:; } return ans; } 妙蛙种子吃完妙脆角到了米奇妙妙屋,妙到家了。这个题思想很简单,就是列举了买东西可能出现的三种情况:第一种单独买,价格最高,第二种全买礼包,第三种礼包加单买,通过回溯找到最低的价钱就行 for(int j=0;j 就是在使用了某个礼包之后减去买到的东西数量再递归的找到没买够的东西需要的最低价钱,在找到最低价格后将数量恢复到一开始,用于下次递归。