牛妹的春游
题目描述
众所周知,牛妹要组织公司的出游。要准备面包和饮料。她买到的面包和饮料都是捆绑销售的,也就是说,一个大包装里面x个面包+y个饮料,花费t元。
为了满足公司的要求,需要一定数量的面包和饮料。
你的任务就是帮助牛妹计算,为了满足公司需要,一共最少花费多少钱。
备注:
每种大包装只能最多买一个,所需面包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]; } };

浙公网安备 33010602011771号