PAT Basic 1020 ?饼 (25) [贪?算法]

题目

?饼是中国?在中秋佳节时吃的?种传统?品,不同地区有许多不同?味的?饼。现给定所有种类?饼的库存量、总售价、以及市场的最?需求量,请你计算可以获得的最?收益是多少。
注意:销售时允许取出?部分库存。样例给出的情形是这样的:假如我们有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

题目分析

已知不同种类月饼的库存,总价格,市场需求量,求最大利润

解题思路

  1. 贪心思想:依次获取单位价格最贵的月饼
  2. 结构体moon,存储月饼的库存,总价格,单位价格(输入总价格时预处理,减少一次遍历)
  3. 按照单位价格降序排序,依次获取,直到达到市场需求量

Code

Code 01

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct moon {
    double w; // total weight (in thousand tons)
    double p; // total price (in billion yuan)
    double pp; // price per thousand ton
};
bool cmp(moon &m1,moon &m2) {
    return m1.pp>m2.pp;
}
int main(int argc, char * argv[]) {
    // 1 接收数据
    int N,D;
    scanf("%d %d",&N,&D);
    vector<moon> vms(N); //存放月饼数据
    for(int i=0; i<N; i++) scanf("%lf", &vms[i].w);
    for(int i=0; i<N; i++) {
        scanf("%lf", &vms[i].p);
        vms[i].pp = vms[i].p/vms[i].w; //计算每重量单位的价格
    }
    // 2 按照单位价格高-低排序
    sort(vms.begin(),vms.end(),cmp);
    // 3 求最大利润
    double tp = 0.0;
    for(int i=0; i<N&&D>0; i++) {
        if(vms[i].w<D) {//如果当前月饼种类的重量小于需求剩余数,全部销售
            D=D-vms[i].w;
            tp+=vms[i].p;
        } else { //如果当前月饼种类的重量大于需求剩余数,按照单位价计算剩余需求重量
            tp+=D*vms[i].pp;
            D=0;
        }
    }
    printf("%.2f", tp);
}

原文地址:https://www.cnblogs.com/houzm/p/12245442.html

时间: 2024-08-01 22:46:30

PAT Basic 1020 ?饼 (25) [贪?算法]的相关文章

PAT 乙级 1020 月饼 (25) C++版

1020. 月饼 (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部分库存.样例给出的情形是这样的:假如我们有3种月饼,其库存量分别为18.15.10万吨,总售价分别为75.72.45亿元.如果市场的最大需求量只有2

PAT乙级 1020. 月饼 (25)(只得到23分)

1020. 月饼 (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部分库存.样例给出的情形是这样的:假如我们有3种月饼,其库存量分别为18.15.10万吨,总售价分别为75.72.45亿元.如果市场的最大需求量只有2

PAT Advanced 1067 Sort with Swap(0,*) (25) [贪?算法]

题目 Given any permutation of the numbers {0, 1, 2,-, N-1}, it is easy to sort them in increasing order. But what if Swap(0, *) is the ONLY operation that is allowed to use? For example, to sort {4, 0, 2, 1, 3} we may apply the swap operations in the f

PAT Advanced 1033 To Fill or Not to Fill (25) [贪?算法]

题目 With highways available, driving a car from Hangzhou to any other city is easy. But since the tank capacity of a car is limited, we have to find gas stations on the way from time to time. Diferent gas station may give diferent price. You are asked

PAT Advanced 1037 Magic Coupon (25) [贪?算法]

题目 The magic shop in Mars is ofering some magic coupons. Each coupon has an integer N printed on it, meaning that when you use this coupon with a product, you may get N times the value of that product back! What is more, the shop also ofers some bonu

PAT Basic 1020

1020 月饼 (25 分) 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部分库存.样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18.15.10 万吨,总售价分别为 75.72.45 亿元.如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼.以及 5 万吨第 3 种月饼,获得 72 +

PAT Basic 1055 集体照 (25 分)

拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每排人数为 /(向下取整),多出来的人全部站在最后一排: 后排所有人的个子都不比前排任何人矮: 每排中最高者站中间(中间位置为 /,其中 m 为该排人数,除法向下取整): 每排其他人以中间人为轴,按身高非增序,先右后左交替入队站在中间人的两侧(例如5人身高为190.188.186.175.170,则队形为175.188.190.186.170.这里假设你面对拍照者,所以你的左边是中间人的右边): 若多人身高相同,则按名

PAT Basic 1045 快速排序 (25 分)

著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边. 给定划分后的 N 个互不相同的正整数的排列,请问有多少个元素可能是划分前选取的主元? 例如给定 $N = 5$, 排列是1.3.2.4.5.则: 1 的左边没有元素,右边的元素都比它大,所以它可能是主元: 尽管 3 的左边元素都比它小,但其右边的 2 比它小,所以它不能是主元: 尽管 2 的右边元素都比它大,但其左边的 3 比它大,所以它不能是主

PAT:1020. 月饼 (25) AC

#include<stdio.h> #include<algorithm> using namespace std; struct cake { double amount; double sum_price,price; }M[1010]; bool cmp(cake a,cake b) { return a.price>b.price; } int main() { double need=0; int kinds=0; scanf("%d%lf",&