首页 > 其他分享 >1774.closest-dessert-cost 最接近目标价格的甜点成本

1774.closest-dessert-cost 最接近目标价格的甜点成本

时间:2022-12-06 19:57:45浏览次数:75  
标签:1774 target closest int res sum abs dessert mcost

问题描述

1774.最接近目标价格的甜点成本

解题思路

回溯法

动态规划法

代码

回溯法

class Solution {
  public:
    // res表示存储的最接近target的成本,sum表示和
    int traverse(vector<int> &toppingCosts, int target, int index, int sum, int res, vector<int> &cnt) {
        if (cnt[index] > 2)
            return res;
        if (sum >= target) {
            // 返回最接近的成本
            if (abs(sum - target) < abs(target - res))
                return sum;
            else if (abs(sum - target) == abs(target - res))
                return min(res, sum);
            else
                return res;
        }
        for (int i = index; i < toppingCosts.size(); i++) {
            sum += toppingCosts[i];
            // int tmp = res;
            cnt[i]++;
            res = traverse(toppingCosts, target, i, sum, res, cnt);
            cnt[i]--;
            sum -= toppingCosts[i];
        }
        if (abs(sum - target) < abs(target - res))
            return sum;
        else if (abs(sum - target) == abs(target - res))
            return min(res, sum);
        else
            return res;
    }
    int closestCost(vector<int> &baseCosts, vector<int> &toppingCosts, int target) {
        // 考虑使用回溯法
        int mcost = baseCosts[0];
        vector<int> cnt(toppingCosts.size(), 0);
        for (int i = 0; i < baseCosts.size(); i++) {
            if (baseCosts[i] == target)
                return target;
            else if (baseCosts[i] > target) {
                if (baseCosts[i] - target < abs(target - mcost))
                    mcost = baseCosts[i];
            } else { // 注意这里?
                int res = traverse(toppingCosts, target, 0, baseCosts[i], baseCosts[i], cnt);
                if (abs(res - target) < abs(target - mcost))
                    mcost = res;
                else if (abs(res - target) == abs(target - mcost))
                    mcost = min(res, mcost);
            }
        }
        return mcost;
    }
};

标签:1774,target,closest,int,res,sum,abs,dessert,mcost
From: https://www.cnblogs.com/zwyyy456/p/16960314.html

相关文章

  • leetcode 1774. 最接近目标价格的甜点成本
    1774.最接近目标价格的甜点成本难度中等133收藏分享切换为英文接收动态反馈你打算做甜点,现在需要购买配料。目前共有 n 种冰激凌基料和 m 种配料可供选购。而制......
  • 1774. 最接近目标价格的甜点成本 ----- 枚举
    你打算做甜点,现在需要购买配料。目前共有n种冰激凌基料和m种配料可供选购。而制作甜点需要遵循以下几条规则:必须选择一种冰激凌基料。可以添加一种或多种配料,也可......
  • 1774. 最接近目标价格的甜点成本
    1774.最接近目标价格的甜点成本暴力classSolution{List<Integer>list=newArrayList<>();intm;intt;publicintclosestCost(int[]baseCos......
  • lintcode:Subarray Sum Closest
    Givenanintegerarray,findasubarraywithsumclosesttozero.Returntheindexesofthefirstnumberandlastnumber.ExampleGiven[-3,1,1,-3,5],retur......
  • P1774 最接近神的人
    1.归并排序方法求逆对(方法相同于P1908逆序对)#include<bits/stdc++.h>usingnamespacestd;constintN=5e5+7;inta[N],st[N];longlongans=0;voidmerge_so......
  • 11.CF522D Closest Equals 线段树+离线询问
    11.CF522DClosestEquals线段树+离线询问给定序列,查询区间内距离最近的两个相等元素。离线查询,按右端点加入贡献计算答案即可洛谷传送门:​​CF522DClosestEquals-洛谷......
  • CF522D Closest Equals
    CF522DClosestEquals题目大意现在有一个序列\(a_1,a_2,...,a_n\),还有\(m\)个查询\(l_j,r_j\)\((1≤l_j≤r_j≤n)\)。对于每一个查询,请找出距离最近的两......