本文主要是介绍PAT 1010 月饼,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需
求量,请你计算可以获得的最大收益是多少。
注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有3种月饼,其库存量分别为18、15、10万吨,总售价分别为75、
72、45亿元。如果市场的最大需求量只有20万吨,那么我们最大收益策略应该是卖出全部15万吨第2种月饼、以及5万吨第3种月饼,获得
72 + 45/2 = 94.5(亿元)。
输入描述:
每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N表示月饼的种类数、以及不超过500(以万吨为单位)的正整数
D表示市场最大需求量。随后一行给出N个正数表示每种月饼的库存量(以万吨为单位);最后一行给出N个正数表示每种月饼的总售价(以亿
元为单位)。数字间以空格分隔。
输出描述:
对每组测试用例,在一行中输出最大收益,以亿元为单位并精确到小数点后2位。
输入例子:
3 20
18 15 10
75 72 45
输出例子:
94.50
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#include <stdio.h>using namespace std;int main()
{int nTotalSorts = 0;int nNeedWeight = 0;double nMessage[1000][4] = {0};double temp[1][4] = {0};int index = 0;int nLast = 0;double dSumMoney = 0;cin >> nTotalSorts >> nNeedWeight;/* 输入每一种的库存量 */for(index = 0; index < nTotalSorts; index++){cin >> nMessage[index][0];}/* 输入每一种的总金额 */for(index = 0; index < nTotalSorts; index++){cin >> nMessage[index][1];nMessage[index][2] = nMessage[index][1]*1.0 / nMessage[index][0];}/* 用选择排序,根据平均金额进行排序,把最大的放到前面 */int i = 0, j = 0;for(i = 0; i < nTotalSorts-1; i++){for(j = i + 1; j < nTotalSorts; j++ ){if(nMessage[i][2] < nMessage[j][2]){temp[0][0] = nMessage[i][0];temp[0][1] = nMessage[i][1];temp[0][2] = nMessage[i][2];nMessage[i][0] = nMessage[j][0];nMessage[i][1] = nMessage[j][1];nMessage[i][2] = nMessage[j][2];nMessage[j][0] = temp[0][0];nMessage[j][1] = temp[0][1];nMessage[j][2] = temp[0][2];}}}nLast = nNeedWeight;index = 0;while(nLast >= 0 && index < nTotalSorts){if(nMessage[index][0] > nLast){dSumMoney = dSumMoney + nLast * nMessage[index][2];}else{dSumMoney = dSumMoney + nMessage[index][1];}nLast = nLast - nMessage[index][0];index++;}printf("%.2f\n",dSumMoney);return 0;
}
这篇关于PAT 1010 月饼的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!