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;
        }
    };
  • 相关阅读:
    MySQL命令2
    MySQL命令1
    前端之HTML1
    linux命令之df dh
    python call java jar
    redis-py中的坑
    YARN应用程序的开发步骤
    Yarn的服务库和事件库使用方法
    SSH无密码验证
    在centos 6.5 在virtual box 上 安装增强版工具
  • 原文地址:https://www.cnblogs.com/LJ-LJ/p/10657067.html
Copyright © 2011-2022 走看看