Leetcode 638 大礼包 DP
JAVA DP:
public final int shoppingOffers(List<Integer> price, List<List<Integer>> special, List<Integer> needs) { Map<String, Integer> cache = new HashMap<String, Integer>(); return search(price, special, needs, cache); } private final int search(List<Integer> prices, List<List<Integer>> specials, List<Integer> needs, Map<String, Integer> cache) { int res = 0; String key = ""; for (int i = 0; i < needs.size(); i++) key += "," + needs.get(i); if (cache.containsKey(key)) return cache.get(key); for (int i = 0; i < needs.size(); i++) res += prices.get(i) * needs.get(i); if (res == 0) return 0; for (int i = 0; i < specials.size(); i++) { List<Integer> special = specials.get(i), clone = new ArrayList<Integer>(needs); boolean canBuy = true; for (int j = 0; j < needs.size(); j++) { int diff = clone.get(j) - special.get(j); if (diff < 0) { canBuy = false; break; } clone.set(j, diff); } if (canBuy) res = Math.min(res, search(prices, specials, clone, cache) + special.get(special.size()-1)); } cache.put(key, res); return res; }
JS DP:
/** * @param {number[]} price * @param {number[][]} special * @param {number[]} needs * @return {number} */ var shoppingOffers = function (price, specials, needs) { return dfs(price, specials, needs, new Map()); } var dfs = function (price, specials, needs, cache) { let re = 0, key = 0; for (let i = 0; i < needs.length; i++) { re += needs[i] * price[i]; key += "," + needs[i]; } if (re == 0) return 0; if (cache.has(key)) return cache.get(key); for (let i = 0; i < specials.length; i++) { let special = specials[i], clone = needs.slice(), canBuy = true; for (let j = 0; j < clone.length; j++) { let diff = clone[j] - special[j]; if (diff < 0) { canBuy = false; break; } clone[j] = diff; } if (canBuy) re = Math.min(re, dfs(price, specials, clone, cache) + special[special.length - 1]); } cache.set(key, re); return re; };
当你看清人们的真相,于是你知道了,你可以忍受孤独
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2020-07-06 Leetcode 300 最长上升子序列
2020-07-06 Leetcode95 不同的二叉搜索树II 精致的分治