1020 月饼 (25分)

题目

月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。

注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、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

陷阱

  1. 需求,库存,总价,单价均不一定整型,所以应用浮点型(float或者double)表示,
  2. 总需求可能大于所有月饼库存之和,可能产生段错误(数组越界)。

解题思路

用结构体数组存放各类月饼的库存和单价。第一轮循环读入库存,第二轮边读入总价,边计算单价。对单价进行排序,依次根据所需库存,计算总价。

代码

#include <stdio.h>
#include <stdlib.h>
typedef struct mooncake
{
    double stock;
    double price;
}mooncake;
void sort(mooncake mk[],int low, int high)		//这里用的快速排序是递增的排序
{
    if(low>=high)   return;
    int i=low,j=high;
    mooncake pivot=mk[low];
    while(i<j)
    {
        while(mk[j].price>=pivot.price&&j>i) j--;
        mk[i]=mk[j];
        while(mk[i].price<=pivot.price&&j>i) i++;
        mk[j]=mk[i];
    }
    mk[i]=pivot;
    sort(mk,low,i-1);
    sort(mk,i+1,high);
}
int main()
{
    int N;
    double D;
    double sum=0;
    if(scanf("%d %lf",&N,&D)==2)
    {
        mooncake *mk=(mooncake *)malloc(sizeof(mooncake)*N);
        double *total=(double *)malloc(sizeof(double)*N);
        for(int i=0;i<N;i++)
            scanf("%lf",&mk[i].stock);
        for(int i=0;i<N;i++)
        {
            scanf("%lf",&total[i]);
            mk[i].price=total[i]/mk[i].stock;		//计算单价
        }
        sort(mk,0,N-1);
        int i=N-1;		//由于是递增,故从后往前读
        while(D>0&&i>=0)		//当市场仍有需求,且月饼仍有库存才进入循环,避免越界
        {
            if(D>mk[i].stock)
            {
                sum=sum+mk[i].stock*mk[i].price;
                D=D-mk[i].stock;
                mk[i].stock=0;
                i--;
            }
            else
            {
                sum=sum+mk[i].price*D;
                mk[i].stock=mk[i].stock-D;
                D=0;
                break;
            }
        }
        printf("%.2lf",sum);		
    }
    return 0;
}

结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和类植物上的病虫害。以下是这一技术的一些关键步骤和组成部: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值