题目描述:node
月饼是中国人在中秋佳节时吃的一种传统食品,不一样地区有许多不一样风味的月饼。现给定全部种类月饼的库存量、总售价、以及市场的最大需求量,请你计算能够得到的最大收益是多少。 注意:销售时容许取出一部分库存。样例给出的情形是这样的:假如咱们有 3 种月饼,其库存量分别为 1八、1五、10 万吨,总售价分别为 7五、7二、45 亿元。若是市场的最大需求量只有 20 万吨,那么咱们最大收益策略应该是卖出所有 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,得到 72 + 45/2 = 94.5(亿元)。 输入格式: 每一个输入包含一个测试用例。每一个测试用例先给出一个不超过 1000 的正整数 N 表示月饼的种类数、以及不超过 500(以万吨为单位)的正整数 D 表示市场最大需求量。随后一行给出 N 个正数表示每种月饼的库存量(以万吨为单位);最后一行给出 N 个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分隔。 输出格式: 对每组测试用例,在一行中输出最大收益,以亿元为单位并精确到小数点后 2 位。 输入样例: 3 20 18 15 10 75 72 45 输出样例: 94.50
本人AC代码:测试
// PAT_1020_月饼 # include <stdio.h> # include <stdlib.h> typedef struct Node { double Cun; double Shou; double M; }NODE, *pNode; int main(void) { int N; // Number double Max; // Needs int i, j; double In = 0.0; scanf("%d",&N); scanf("%lf",&Max); NODE No; pNode node = (pNode)malloc(sizeof(NODE)*N); //输入信息,并计算性价比 for (i=0; i<N; i++) { scanf("%lf",&node[i].Cun); } for (i=0; i<N; i++) { scanf("%lf",&node[i].Shou); node[i].M = (double)node[i].Shou/(double)node[i].Cun; } // 排序 for (i=1; i<N; i++) { for (j=0; j<i; j++) { if (node[i].M > node[j].M) { No = node[i]; node[i] = node[j]; node[j] = No; } } } // 遍历 // for (i=0; i<N; i++) // { // printf("i = %d Cun = %d, Xingjiabi = %f\n",i,node[i].Cun,node[i].M); // } i=0; // 开始计算 while (Max > 0 && i!=N) { if (node[i].Cun <= Max) { In += node[i].Shou; Max -= node[i].Cun; i++; } else { In = In+(Max*node[i].M); break; } } printf("%.2f\n",In); return 0; }
RRRspa