题目描述:

https://leetcode-cn.com/problems/shopping-offers/

解题思路:

这类求最大最小的问题首先想到的就是用DP求解。

这题还用到了递归,首先计算单买商品,不购买大礼包的价格最为初始最小价值。

再利用循环计算包含每一个大礼包时的最小价值。需要递归计算的是,在购买了礼包A以后,剩余的需求量的最小价格。

其中需要注意的是不能超过需求量购买商品,所以对于每个礼包需要做一次判断,是否购买了该礼包后,超过了总需求。

代码:

class Solution {
public:
bool check(vector<int>bag, vector<int> needs)
{
for(int i=; i<needs.size(); i++)
{
if(needs[i]<bag[i])
{
return false;
}
}
return true;
} int shoppingOffers(vector<int>& price, vector<vector<int>>& special, vector<int>& needs) {
int min_price=;
for(int i=; i<price.size(); i++)
{
min_price += price[i]*needs[i];
} int j;
for(int i=; i<special.size(); i++)
{
vector<int> remain = needs;
if(check(special[i], remain))
{
for(j=; j<remain.size(); j++)
{
remain[j] = remain[j] - special[i][j];
}
int cur_price = special[i][j] + shoppingOffers(price, special, remain);
min_price = min(cur_price, min_price);
}
}
return min_price;
}
};

leetcode: 638.大礼包的更多相关文章

  1. Java实现 LeetCode 638 大礼包(阅读理解题,DFS)

    638. 大礼包 在LeetCode商店中, 有许多在售的物品. 然而,也有一些大礼包,每个大礼包以优惠的价格捆绑销售一组物品. 现给定每个物品的价格,每个大礼包包含物品的清单,以及待购物品清单.请输 ...

  2. Leetcode之深度优先搜索&回溯专题-638. 大礼包(Shopping Offers)

    Leetcode之深度优先搜索&回溯专题-638. 大礼包(Shopping Offers) 深度优先搜索的解题详细介绍,点击 在LeetCode商店中, 有许多在售的物品. 然而,也有一些大 ...

  3. LeetCode 638 Shopping Offers

    题目链接: LeetCode 638 Shopping Offers 题解 dynamic programing 需要用到进制转换来表示状态,或者可以直接用一个vector来保存状态. 代码 1.未优 ...

  4. Swift LeetCode 目录 | Catalog

    请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift    说明:题目中含有$符号则为付费题目. 如 ...

  5. C#LeetCode刷题-动态规划

    动态规划篇 # 题名 刷题 通过率 难度 5 最长回文子串   22.4% 中等 10 正则表达式匹配   18.8% 困难 32 最长有效括号   23.3% 困难 44 通配符匹配   17.7% ...

  6. LeetCode刷题总结-动态规划篇

    本文总结LeetCode上有动态规划的算法题,推荐刷题总数为54道.具体考点分析如下图: 1.中心扩展法 题号:132. 分割回文串 II,难度困难 2.背包问题 题号:140. 单词拆分 II,难度 ...

  7. leetcode动态规划题目总结

    Hello everyone, I am a Chinese noob programmer. I have practiced questions on leetcode.com for 2 yea ...

  8. 2019年7-8月Leetcode每日训练日志

    2019-08-29 #274 H指数 2019-08-28 #287 寻找重复数 #875 爱吃香蕉的珂珂 #704 二分查找 2019-08-27 #744 寻找比目标字母大的最小字母 #225 ...

  9. C#LeetCode刷题-深度优先搜索

    深度优先搜索篇 # 题名 刷题 通过率 难度 98 验证二叉搜索树   22.2% 中等 99 恢复二叉搜索树   45.1% 困难 100 相同的树   48.1% 简单 101 对称二叉树   4 ...

随机推荐

  1. elasticsearch版本控制及mapping映射属性介绍

    学习elasticsearch不仅只会操作,基本的运行原理我们还是需要进行了解,以下内容我讲对elasticsearch中的基本知识原理进行梳理,希望对大家有所帮助! 一.ES版本控制 1.Elast ...

  2. centos iftop iotop htop

    centos6.4安装iftopyum install gccyum -y install libpcap libpcap-develyum -y install ncurses ncurses-de ...

  3. C#异步编程の-------异步编程模型(APM)

    术语解释: APM               异步编程模型, Asynchronous Programming Model EAP                基于事件的异步编程模式, Event ...

  4. Excel里面Left这个怎么用?

    LEFT 返回文本字符串中第一个字符或前几个字符LEFT(A2, 4)LEFT 返回前 4 个字符,因为每个字符按 1 计数.无论您计算机上的默认语言设置如何,函数 LEFT 都返回前 4 个字符.

  5. QT 14 线程使用

    1 线程基础 QThread 是对本地平台线程的一个非常好的跨平台抽象.启动一个线程非常简单.让我们看一段代码,它产生另一个线程,该线程打印hello,然后退出. // hellothread/hel ...

  6. 使用pycharm调用模块后字体变灰

    点击小灯泡提示出现以下内容:This inspection detects names that should resolve but don't. Due to dynamic dispatch a ...

  7. Cesium学习2:如何从零开始在Eclipse IDE,Java语言搭建cesium开发环境

    废话不多说,今天就先在Eclipse上搭建Cesium开发环境吧~ 零.Cesium简介 Cesiumjs 是一套javascript库,用来渲染3D地球,2D区域地图,和多种GIS要素.不需要安装任 ...

  8. 理解 DocumentFragment

    理解 DocumentFragment 含义:创建文档片段,它继承了Node的所有方法,对DOM操作性能非常好.创建文档片段 如下方法: var frag = document.createDocum ...

  9. 关于linux系统如何实现fork的研究(一)

    引言     fork函数是用于在linux系统中创建进程所使用,而最近看了看一个fork()调用是怎么从应用到glibc,最后到内核中实现的,这片文章就聊聊最近对这方面研究的收获吧.我们主要聊聊从g ...

  10. python wsgi 简介

    wsgi全称是"Web Server Gateway Interfacfe",web服务器网关接口,wsgi在python2.5中加入,是web服务器和web应用的标准接口,任何实 ...