zoukankan      html  css  js  c++  java
  • 74大礼包(638)

    作者: Turbo时间限制: 1S章节: 深度优先搜索

    晚于: 2020-08-26 12:00:00后提交分数乘系数50%

    截止日期: 2020-09-02 12:00:00

    问题描述 :

    在商店中, 有许多在售的物品。

    然而,也有一些大礼包,每个大礼包以优惠的价格捆绑销售一组物品。

    现给定每个物品的价格,每个大礼包包含物品的清单,以及待购物品清单。请输出确切完成待购清单的最低花费。

    每个大礼包的由一个数组中的一组数据描述,最后一个数字代表大礼包的价格,其他数字分别表示内含的其他种类物品的数量。

    任意大礼包可无限次购买。

    示例 1:

    输入: [2,5],      [3,2],     [[3,0,5],[1,2,10]]

    输出: 14

    解释: 

    有A和B两种物品,价格分别为¥2和¥5。

    你需要购买3个A和2个B。

    大礼包1,你可以以¥5的价格购买3A和0B。

    大礼包2, 你可以以¥10的价格购买1A和2B。

    所以你付了¥10购买了1A和2B(大礼包2),以及¥4购买2A。

    示例 2:

    输入: [2,3,4],      [1,2,1],      [[1,1,0,4],[2,2,1,9]]

    输出: 11

    解释: 

    A,B,C的价格分别为¥2,¥3,¥4.

    你需要买1A,2B和1C

    你可以用¥4购买1A和1B,也可以用¥9购买2A,2B和1C。

    所以你付了¥4买了1A和1B(大礼包1),以及¥3购买1B, ¥4购买1C。

    你不可以购买超出待购清单的物品,尽管购买大礼包2更加便宜。

    说明:

    最多6种物品, 100种大礼包。

    每种物品,你最多只需要购买6个。

    你不可以购买超出待购清单的物品,即使更便宜。

    可使用以下main函数:

    int main()

    {

        vector<int> price;

        vector<vector<int>> special;

        vector<int> needs;

        int n,m;

        cin>>n;

        int p,need;

        for(int i=0; i<n; i++)

        {

            cin>>p;

            price.push_back(p);

        }

        for(int i=0; i<n; i++)

        {

            cin>>need;

            needs.push_back(need);

        }

        cin>>m;

        for(int i=0; i<m; i++)

        {

            vector<int> oneSpecial;

            int qty;

            for(int j=0; j<n; j++)

            {

                cin>>qty;

                oneSpecial.push_back(qty);

            }

            int amount;

            cin>>amount;

            oneSpecial.push_back(amount);

            special.push_back(oneSpecial);

        }

        int res=Solution().shoppingOffers(price, special, needs);

        cout<<res<<endl;

        return 0;

    }

    输入说明 :

    首先输入物品的种类数n

    下一行输入n个整数,表示物品的价格

    第三行输入n个整数,表示每种物品需要购买的个数

    第四行输入大礼包的种类数m,

    下面m行,每一行输入一种大礼包的信息,其中,前n个整数表示该大礼包包含每种物品的数量,第n+1个整数表示大礼包的价格。

    最多6种物品, 100种大礼包。

    每种物品,你最多只需要购买6个。

    输出说明 :

    输出结果

    输入范例 :

    输出范例 :

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    class Solution {
    public:
        int shoppingOffers(vector<int>& price, vector<vector<int>>& special, vector<int>& needs) 
        {
            int sum=0;
            
            for(int i=0;i<price.size();i++)
                sum+=price[i]*needs[i];//计算总共需要的价格 
            for(int i=0;i<special.size();i++)
            {
                vector<int> new_needs=needs;
                int j;
                for(j=0;j<new_needs.size();j++)
                {
                    int temp=new_needs[j]-special[i][j];
                    if(temp<0)//一旦差值变成负数就证明买多了,不行
                        break;
                    new_needs[j]=temp;
                }
                if(j==new_needs.size())
                    sum=min(sum,shoppingOffers(price,special,new_needs)+special[i][j]);
            }
        return sum;
        }
    };
    int main()
    {
        vector<int> price;
        vector<vector<int>> special;
        vector<int> needs;
        int n,m;
        cin>>n;
        int p,need;
        for(int i=0; i<n; i++)
        {
            cin>>p;
            price.push_back(p);
        }
        for(int i=0; i<n; i++)
        {
            cin>>need;
            needs.push_back(need);
        }
        cin>>m;
        for(int i=0; i<m; i++)
        {
            vector<int> oneSpecial;
            int qty;
            for(int j=0; j<n; j++)
            {
                cin>>qty;
                oneSpecial.push_back(qty);
            }
            int amount;
            cin>>amount;
            oneSpecial.push_back(amount);
            special.push_back(oneSpecial);
        }
    
        int res=Solution().shoppingOffers(price, special, needs);
        cout<<res<<endl;
        return 0;
    }
  • 相关阅读:
    BZOJ 1968: [Ahoi2005]COMMON 约数研究
    BZOJ 2463: [中山市选2009]谁能赢呢?
    BZOJ 2462: [BeiJing2011]矩阵模板
    hihoCoder 后缀自动机三·重复旋律6
    hihoCoder #1445 : 后缀自动机二·重复旋律5
    BZOJ 2179: FFT快速傅立叶
    BZOJ 3926: [Zjoi2015]诸神眷顾的幻想乡
    BZOJ 2946: [Poi2000]公共串
    BZOJ 2882: 工艺
    SPOJ LCS2
  • 原文地址:https://www.cnblogs.com/zmmm/p/13648533.html
Copyright © 2011-2022 走看看