zoukankan      html  css  js  c++  java
  • leetcode: 638.大礼包

    题目描述:

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

    解题思路:

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

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

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

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

    代码:

    class Solution {
    public:
        bool check(vector<int>bag, vector<int> needs)
        {
            for(int i=0; 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=0;
            for(int i=0; i<price.size(); i++)
            {
                min_price += price[i]*needs[i];
            }
            
           
            int j;
            for(int i=0; i<special.size(); i++)
            {
                vector<int> remain = needs;
                if(check(special[i], remain))
                {
                    for(j=0; 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;
        }
    };
  • 相关阅读:
    vlookup返回多个结果
    11i
    Oracle EBS APIs
    EBS 定义显示总帐快码设置
    EBS开发技术之Patch安装
    @Autowired和@Resource的区别
    mycat数据库中间件入门
    spring配置多数据源——mybatis
    localstorage跟sessionstorage
    java短信接口调用
  • 原文地址:https://www.cnblogs.com/LJ-LJ/p/10657067.html
Copyright © 2011-2022 走看看