L2-003 月饼 (25 分)(天梯赛)

博客涉及天梯赛与排序相关内容,但具体信息缺失。推测可能围绕天梯赛中排序算法的应用、排名排序等信息技术相关要点展开。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b,f;double c[1005],d[1005],e[1005],g,h=0;
    cin>>a>>b;
    for(int i=1;i<=a;i++)
        cin>>c[i];
    for(int i=1;i<=a;i++)
        {
            cin>>d[i];
            e[i]=(double)(d[i]/c[i]);
        }
        for(int j=1;j<a;j++)
            for(int i=1;i<=a-j;i++)
        {
            if(e[i]<e[i+1])
            {
                g=e[i];e[i]=e[i+1];e[i+1]=g;
                f=c[i];c[i]=c[i+1];c[i+1]=f;
                f=d[i];d[i]=d[i+1];d[i+1]=f;
            }
        }
        for(int i=1;i<=a;i++)
        {
                        if(b<c[i])
            {
                e[i]=e[i]*b;
                h=h+e[i];
                b=b-c[i];
            }
            if(b>=c[i])
            {
                b=b-c[i];
                h=(double)(h+d[i]);
            }
            if(b<=0)
                break;
        }
        cout<<setiosflags(ios::fixed)<<setprecision(2)<<h;
    return 0;
}

### L2-003 月饼问题解析 L2-003 月饼问题是经典的贪心算法应用案例之一。该问题的核心在于如何通过合理的销售策略最大化收益。 #### 贪心算法的应用 为了实现最大化的收益目标,可以采用如下方法:先计算每种月饼的单位价格(即总售价除以库存量),然后按照单位价格从高到低排序。接着依次尝试出售这些月饼,直到市场的需求完全被满足为止[^1]。 以下是具体的代码实现: ```cpp #include <bits/stdc++.h> using namespace std; struct Mooncake { double stock; // 库存量 double total; // 总售价 double price; // 单价 }; bool cmp(const Mooncake& a, const Mooncake& b) { return a.price > b.price; // 按单价从高到低排序 } int main() { int N, D; cin >> N >> D; vector<Mooncake> mooncakes(N); for (int i = 0; i < N; i++) { cin >> mooncakes[i].stock; } for (int i = 0; i < N; i++) { cin >> mooncakes[i].total; mooncakes[i].price = mooncakes[i].total / mooncakes[i].stock; // 计算单价 } sort(mooncakes.begin(), mooncakes.end(), cmp); double maxProfit = 0.0; // 最大收益 for (const auto& cake : mooncakes) { if (D <= 0) break; // 市场需求量已满足 double sell = min(cake.stock, (double)D); // 当前月饼的销售数量 maxProfit += sell * cake.price; // 累加收益 D -= sell; // 更新剩余需求量 } printf("%.2f\n", maxProfit); // 输出最大收益,保留两位小数 return 0; } ``` 上述 C++ 实现展示了如何利用结构体存储数据并按需排序,最终完成收益的最大化计算过程[^1]。 对于 Python 用户而言,也可以采取类似的逻辑来解决问题: ```python _, demand = map(int, input().split()) mooncakes = sorted( zip(map(float, input().split()), map(float, input().split())), key=lambda x: x[1] / x[0], reverse=True ) income = 0 for storage, price in mooncakes: if demand >= storage: demand -= storage income += price else: income += demand * (price / storage) break print(f"{income:.2f}") ``` 此段 Python 代码同样遵循了贪心原则,并且简洁高效地实现了题目要求的功能[^4]。 #### 关键点析 1. **输入处理** 输入部需要别读取库存量和对应总售价的数据,并据此计算出每种商品的单位价值以便后续操作[^2]。 2. **排序机制** 使用自定义比较器或者 `lambda` 表达式对所有商品依据其单位价值降序排列,从而优先考虑那些性价比更高的选项[^3]。 3. **动态调整需求变量** 在遍历过程中不断减少未满足的需求总量直至归零;同时累积所得利润作为最终结果的一部--- ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值