[二维费用背包] 牛客 6218/C 牛妹的春游

题目

在这里插入图片描述

思路

面包和饮料作为两种价值,求其分配最小值,就是二位费用背包问题。但是这里要注意面包和饮料是可以超过所求值,就要在循环内扩大br与dr的值。并且可能第k个捆绑销售的物品不会购买,所以循环内不是i>=p[k][0]而是i>=0

代码

class Solution {
public:
    /**
     *
     * @param breadNum int整型
     * @param beverageNum int整型
     * @param packageSum int整型vector<vector<>> 每个一维数组中有三个数,依次表示这个包装里面的面包数量、饮料数量、花费
     * @return int整型
     */
    
    int minCost(int br, int dr, vector<vector<int> >& p) {
    int dp[2010][2010];
        memset(dp,0x3f3f3f3f,sizeof dp);
        dp[0][0]=0;
        for(int k=0;k<p.size();k++){
            for(int i=2*br;i>=0;i--){
                for(int j=2*dr;j>=0;j--){
                    dp[i][j]=min(dp[i][j],dp[max(i-p[k][0],0)][max(j-p[k][1],0)]+p[k][2]);
                }
            }
        }
        return dp[br][dr];
    }
};

猜你喜欢

转载自blog.csdn.net/kosf_/article/details/107241647