这题就离谱,剪枝反而更慢了。

这里我没有使用官方的记忆化搜索,而是通过控制选取礼包的起点,也就是函数中的那个参数st,来保证不重复选取礼包的组合,事实证明我的做法更优。

这里回溯的时候,记得要传一个new ArrayList<>(needs),不然传过去的其实是指针,会修改原来的needs,跌坑好几次了orz

思路的话没啥好说的,就是硬搜,毫无技巧可言,有点像那个完全背包。

import java.util.ArrayList;
import java.util.List;class Solution {List<Integer> price;int len;List<List<Integer>> special;int ans = Integer.MAX_VALUE;public int shoppingOffers(List<Integer> price, List<List<Integer>> special, List<Integer> needs) {this.price = price;len = price.size();this.special = special;dfs(needs, 0, 0);return ans;}// now 为已经花费的金额// st 为选取st以及之后的礼包,是为了不重复选取顺序不同但礼包相同的组合void dfs(List<Integer> needs, int now, int st) {// sum为直接单买的价格int sum = now;for (int i = 0; i < len; i++) {sum += price.get(i) * needs.get(i);}ans = Math.min(sum, ans);// 各种礼包选购一遍,状态转移for (int i = st; i < special.size(); i++) {List<Integer> temp = new ArrayList<>(needs);List<Integer> list = special.get(i);boolean flag = true;for (int j = 0; j < len; j++) {int after = needs.get(j) - list.get(j);if (after < 0) {flag = false;break;}temp.set(j, after);}if (flag) {dfs(temp, now + list.get(len), i);}}}
}

减速的剪枝

// 剪枝 无用的礼包以及某个商品过多的礼包删掉for (List<Integer> ASpecial : special) {int sum = 0;boolean flag = true;for (int j = 0; j < len; j++) {if (ASpecial.get(j) > needs.get(j)) {flag = false;break;}sum += price.get(j) * ASpecial.get(j);}if (sum >= ASpecial.get(len) && flag) {trueSpecial.add(ASpecial);}}this.special = trueSpecial;

Leetcode_638_大礼包_dfs相关推荐

  1. AppStore审核2.1被拒大礼包过审经历

    本团队的iOS端迭代至今,经历过AppStore审核的数次调整,包括审核时长.严厉程度等,尝过各种花式的拒绝理由,但从没有像2018年初这次来得猛烈和漫长.从首次提交到最后过审几乎花费一个月的时间,下 ...

  2. 七夕大礼包:26个AI学习资源送给你!

    整理 | Jane出品 | AI科技大本营(ID:rgznai100) 免费的在线学习课程一直是大多数人学习 AI 知识和技能的方式之一.今天,基于 Github 上一位小姐姐 Chip Huyen ...

  3. 算法实现没思路?最全Python算法实现大礼包!(附学习资源)

    整理 | Rachel 责编 | Jane 出品 | Python大本营(ID:pythonnews) [导语]数据结构与算法是所有人都要学习的基础课程,自己写算法的过程可以帮助我们更好地理解算法思路 ...

  4. 三天学会Selenium,阿里p7精心整理自动化测试Selenium大礼包

    大家都知道Selenium很好用,Selenium作为一个 Web 应用程序自动化测试工具,Selenium 可以直接驱动浏览器,模拟真正的用户操作,解决回归测试和多浏览器兼容性测试问题:而且跟 Py ...

  5. 女皇万岁!我们是来送礼的 ——阿里聚安全春天系列全套大礼包

    2017年03月07日 14:01  682 我一直都认为 世界上有一群别有用心的人 他们一直努力让别人们相信 程序员是这样的 但其实 他们存在着一群特殊物种--程序媛 她们可以优雅大方 智慧与美貌并 ...

  6. 谷歌年度AI技术总结来了!Jeff Dean执笔,附赠27个开源工具和数据大礼包

    杨净 梦晨 发自 凹非寺 量子位 报道 | 公众号 QbitAI Jeff Dean亲笔盘点谷歌AI研究成果,已经成了一年一度的保留节目. 今年也不例外,还是他抽出一部分假期时间完成的. 过去一年,谷 ...

  7. 打开深蓝医生的国庆大礼包!

    打开深蓝医生国庆大礼包,里面是一个orm,我就看看了看这个开源的orm,我觉得很多人应该只看看文章并没有下载也没有看源码,我建议有时间的还是看看好 国庆大礼包地址:节前送礼:PDF.NET(PWMIS ...

  8. 秀一秀我的微软MVP(最有价值专家)的大礼包和水晶奖杯!

    秀一秀我的微软MVP(最有价值专家)的大礼包和水晶奖杯! 转载于:https://blog.51cto.com/xiaoxia/830691

  9. 神策数据加入猿团程序员大牛卡,创客大礼包助力开发。

    10月10日,猿团与中国电信正式推出程序员大牛卡,卡内流量最高可达10G,解决了程序员移动上网流量问题.除此之外,大牛卡联合神策数据.OneAPM.极光推送.云势互动.BeeCloud.野狗.爱加密. ...

最新文章

  1. iOS支付宝(Alipay)接入详细流程,比微信支付更简单,项目实战中的问题分析
  2. Nat. Mach. Intell. | 基于神经网络的迁移学习用于单细胞RNA-seq分析中的聚类和细胞类型分类...
  3. 动态规划python_机器人是如何规划路径的?动画演示一下吧
  4. opencv教程大全
  5. 47. 对数组进行冒泡排序,实现冒泡排序的基础版与优化版
  6. phalcon: 解决php7/phalcon3.2以上版本,不支持oracle数据库的方法
  7. golang reflect 反射 简介
  8. FreeBSD挂截U盘和光盘
  9. 使用Spring Boot应用程序将代码管道化
  10. mysql授权远程访问
  11. C++ 变量初始化规则
  12. C#字典类型转URL参数字符串
  13. java batik_Java端使用Batik将SVG转为PNG
  14. StretchDIBits 的使用
  15. roseha linux,RoseHA 9.0 for Linux快速安装说明_v2.0-2015-04.pdf
  16. 计算机网络--使用网络协议分析器捕捉和分析协议数据包
  17. 2019计算机小高考成绩,2019江苏小高考成绩揭晓生物化学4A不易
  18. mysql mtq_mysql实现远程登录
  19. pytorch1.10新功能inference_mode
  20. 如何快速融入团队并成为团队核心(四)

热门文章

  1. 当姿态估计算法遇上《本草纲目》,看“刘畊宏男孩”如何驱动虚拟人
  2. python入门教程第28讲_Python爬虫入门教程第二十八讲: 《海王》评论数据抓取 scrapy...
  3. (九)play之yabe项目【发表博文】
  4. 多余逗号的CSV文件写入文件的解决方案
  5. Apollo MPC横纵向耦合控制学习笔记
  6. 手机恢复出厂设置命令_手机恢复出厂设置是什么意?
  7. iOS上架小课堂:被拒解决方案汇总【2.1蓝牙权限、3.1.1微信小程序、5.1.1权限使用说明、 境外IP访问权限等】
  8. 电脑蓝屏提示错误代码0X000000B4怎么办?
  9. Java使用poi/easyexcel操作excel
  10. iOS - Mac 锁屏快捷键设置