日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 1774. 最接近目标价格的甜点成本(DFS / 01背包)

發布時間:2024/7/5 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1774. 最接近目标价格的甜点成本(DFS / 01背包) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

你打算做甜點,現在需要購買配料。目前共有 n 種冰激凌基料和 m 種配料可供選購。而制作甜點需要遵循以下幾條規則:

  • 必須選擇 一種 冰激凌基料
  • 可以添加 一種或多種 配料,也可以不添加任何配料。
  • 每種類型的配料 最多兩份

給你以下三個輸入:

baseCosts ,一個長度為 n 的整數數組,其中每個 baseCosts[i] 表示第 i 種冰激凌基料的價格。
toppingCosts,一個長度為 m 的整數數組,其中每個 toppingCosts[i] 表示 一份 第 i 種冰激凌配料的價格。
target ,一個整數,表示你制作甜點的目標價格。
你希望自己做的甜點總成本盡可能接近目標價格 target 。

返回最接近 target 的甜點成本。
如果有多種方案,返回 成本相對較低 的一種。

示例 1: 輸入:baseCosts = [1,7], toppingCosts = [3,4], target = 10 輸出:10 解釋:考慮下面的方案組合(所有下標均從 0 開始): - 選擇 1 號基料:成本 7 - 選擇 10 號配料:成本 1 x 3 = 3 - 選擇 01 號配料:成本 0 x 4 = 0 總成本:7 + 3 + 0 = 10 。示例 2: 輸入:baseCosts = [2,3], toppingCosts = [4,5,100], target = 18 輸出:17 解釋:考慮下面的方案組合(所有下標均從 0 開始): - 選擇 1 號基料:成本 3 - 選擇 10 號配料:成本 1 x 4 = 4 - 選擇 21 號配料:成本 2 x 5 = 10 - 選擇 02 號配料:成本 0 x 100 = 0 總成本:3 + 4 + 10 + 0 = 17 。不存在總成本為 18 的甜點制作方案。示例 3: 輸入:baseCosts = [3,10], toppingCosts = [2,5], target = 9 輸出:8 解釋:可以制作總成本為 810 的甜點。返回 8 ,因為這是成本更低的方案。示例 4: 輸入:baseCosts = [10], toppingCosts = [1], target = 1 輸出:10 解釋:注意,你可以選擇不添加任何配料,但你必須選擇一種基料。提示: n == baseCosts.length m == toppingCosts.length 1 <= n, m <= 10 1 <= baseCosts[i], toppingCosts[i] <= 10^4 1 <= target <= 10^4

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/closest-dessert-cost
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

  • 暴力搜索
class Solution {int ans = INT_MAX;int diff = INT_MAX; public:int closestCost(vector<int>& baseCosts, vector<int>& toppingCosts, int target) {int n = baseCosts.size(), m = toppingCosts.size();for(int i = 0; i < n; i++){dfs(toppingCosts, 0, baseCosts[i], target);}return ans;}void dfs(vector<int>& toppingCosts, int idx, int val, int target){if(abs(val-target) < diff || (abs(val-target)==diff && val < ans)){ans = val;diff = abs(val-target);}if(idx == toppingCosts.size())return;dfs(toppingCosts, idx+1, val, target);//不拿dfs(toppingCosts, idx+1, val+toppingCosts[idx], target);//拿一份dfs(toppingCosts, idx+1, val+2*toppingCosts[idx], target);//拿2份} };

12 ms 8.5 MB C++

  • 更好的時間復雜度做法:https://leetcode-cn.com/problems/closest-dessert-cost/solution/zhuan-hua-wei-0-1bei-bao-qiu-jie-by-luci-o5yt/
  • 將輔料數組追加一遍自己(最多使用兩次),跟基料(初始狀態)一起,使用01背包求解

我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的LeetCode 1774. 最接近目标价格的甜点成本(DFS / 01背包)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。