首页 > 其他 > 详细

牛妹的春游

时间:2020-07-09 23:01:18      阅读:66      评论:0      收藏:0      [点我收藏+]

题目描述 

众所周知,牛妹要组织公司的出游。要准备面包和饮料。她买到的面包和饮料都是捆绑销售的,也就是说,一个大包装里面x个面包+y个饮料,花费t元。
为了满足公司的要求,需要一定数量的面包和饮料。
你的任务就是帮助牛妹计算,为了满足公司需要,一共最少花费多少钱。
示例1

输入

复制
5,60,[[3,36,120],[10,25,129],[5,50,250],[1,45,130],[4,20,119]]

输出

复制
249

备注:

每种大包装只能最多买一个,所需面包breadNum、饮料的总量beverageNum均不超过2000
牛妹一定能找到满足要求的方案让大家能够出游。
 
分析:因为最后的面包和饮料总量都不超2000,所以可以开一个二维数组背包求解即可。
 
代码:
class Solution {
public:
    /**
     *
     * @param breadNum int整型
     * @param beverageNum int整型
     * @param packageSum int整型vector<vector<>> 每个一维数组中有三个数,依次表示这个包装里面的面包数量、饮料数量、花费
     * @return int整型
     */
    int minCost(int breadNum, int beverageNum, vector<vector<int> >& packageSum) {
        // write code here
        const int N = 2e3 + 7;
        int dp[N][N];
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                dp[i][j] = 2e9 + 7;
            }
        }
        dp[0][0] = 0;
        int n = packageSum.size();
        for (int i = 0; i < n; i++) {
            int x = packageSum[i][0];
            int y = packageSum[i][1];
            int t = packageSum[i][2];
            for (int j = breadNum; j >= 0; j--) {
                for (int k = beverageNum; k >= 0; k--) {
                    dp[min(j + x, breadNum)][min(k + y, beverageNum)] = min(dp[min(j + x, breadNum)][min(k + y, beverageNum)], dp[j][k] + t);
                }
            }
        }
        return dp[breadNum][beverageNum];
    }
};

 

牛妹的春游

原文:https://www.cnblogs.com/HighLights/p/13276595.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!