Shopping Offers
程序员文章站
2024-03-17 08:39:40
...
1.解析
题目大意,给定每个商品的价值和优惠券(优惠券可以重复使用),求解所购买商品最少花多少钱。
2.分析
我最初看到这道题的时候,求最值,以为是DP,但在设计的过程中,发现有个问题,就是所取到的值并不是局部的最优解,因为不单要考虑优惠券,而且还要考虑无法使用优惠券的那部分的钱,所以不是DP。参考@Grandyang博主的思路,发现其实采用深度优先检索是最简便的,利用一个临时变量表示是否当前的优惠券可用,若可用,则继续搜索,若不可用,恢复之前的状态,搜索下一个。蛮简单的,具体实现如下:
class Solution {
public:
int shoppingOffers(vector<int>& price, vector<vector<int>>& special, vector<int>& needs){
int res = 0, n = price.size();
for (int i = 0; i < n; ++i)
res += price[i] * needs[i];
for (auto offer : special){ //每次遍历所有的优惠券,因为优惠券的使用数量不限
bool isValid = true;
for (int i = 0; i < needs.size(); ++i){ //假设当前的优惠券可用
if (needs[i] < offer[i]) isValid = false; //若检测到不可用,标记
needs[i] -= offer[i];
}
if (isValid)
res = min(res, shoppingOffers(price, special, needs) + offer.back());
for (int i = 0; i < needs.size(); ++i){ //恢复不使用优惠券前的状态
needs[i] += offer[i];
}
}
return res;
}
};
推荐阅读
-
Shopping Offers
-
shopping客户端
-
C#集合Collections购物车Shopping Cart(实例讲解)
-
C#集合Collections购物车Shopping Cart(实例讲解)
-
python3-模拟ATM_shopping
-
Python学习笔记(5)practice:shopping_cart
-
PAT甲级1044 Shopping in Mars (25分)|C++实现
-
过年啦!小B高兴的不行了,她收到了很多红包,可以实现好多的愿望呢。小B可是对商店货架上心仪的货物红眼好久了,只因囊中羞涩作罢,这次她可是要大大的shopping一番。小B想去购物时,总是习惯性的把要买...
-
HDU -> ACM -> Shopping
-
python3-模拟ATM_shopping