YACS20223月乙组——滚雪球(投资问题)

小爱面临n个投资项目,每个项目有成本c_i和利润p_i。在只能投资k个项目且初始资金为m元的限制下,需要确定最多能积累多少钱。通过先投资成本低的项目,利用收益滚动投资,采用贪心策略,每次选择利润最大的项目进行投资。题目要求按成本对项目排序,并使用优先队列记录利润,以实现模拟过程。
摘要由CSDN通过智能技术生成

题目描述

小爱有 m  元钱,有  n 个项目等待她的投资,每个项目只能投资一次。其中第 i 个项目要求先支出成本 c_i  元,待项目完成后,可以收回全部成本,且获得 p_i 元利润,若小爱的钱不足 c_i ,就没法投资这个项目了。

投资不必按照项目的编号顺序进行,可以用老项目收回的成本及利润支付新项目的成本。若小爱只能投资 k 个项目,那么她最多可以积累多少钱呢?

输入 n,k,m 3 2 1; 接下来每行是c_i 和p_i

1 1

2 2

3 3 输出 :4   说明:先做第一个项目再做第二个项目,第三个项目虽然赚钱最多,但小爱没时间积累足够的本金

最多积累多少钱,所以肯定是每次本金允许下投资利润最大的,这样得到的更多,下一次可投资的项目更多。

使用结构体来记录 输入的数据,然后在排序时,根据成本,从小到大排序 sort(, , cmp);

使用优先队列来记录增加的利润premium

我看了题解,是贪心的思想。不过我觉得本质上,这道题是用模拟的方式解决。

所以我们只需要:

①对所有项目按照本金要求c_i从小到大排序,这样更新可投资项目更方便

②用一个优先队列存储所有可投资项目的利润,在成本小于本金的情况下(while project[i].cost<=m )每次取出最大的一个进行投资。投资完把新的可投资项目的利润放进这个优先队列。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xy404chef

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值