【虚拟理财游戏】

567 篇文章

已下架不支持订阅

473 篇文章

已下架不支持订阅

题目解析

第一眼看这题有点像二维费用背包,但是本题备注中有一个关键限制:

在虚拟游戏中,最多只能投资2个理财产品;

那么本题其实就变成了:m个理财产品中选1个或2个,所选产品风险值之和 ≤ x,投资额之和 ≤ n,并且最终所选产品的投资回报之和最大。

由于 m 的数量级不大,取值范围[1,20],因此可以考虑暴力破解。

 


前面解法思路只有93%通过率,根据题目意思:

你要在可接受范围内选择最优的投资方式获得最大回报。

如果有多种投资方式能拿到最大回报,那么此时应该优中选优(虽然题目没有明说),我们应该选其中风险值更小的。

另外,需要注意的是,当我们选择的两个产品的投资回报相同时,此时应该优先投资风险更小的产品。

我理解应该最后7%的用例应该就是这两个场景。

 

JS算法源码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
 
void (async function () {
  // 产品数, 总投资, 总风险
  const [m, n, 

已下架不支持订阅

### 题目内容 在一款虚拟游戏中生活,玩家必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。现有一家 Bank,它提供有若干理财产品 m 个,风险及投资回报不同,玩家有 N(元)进行投资,能接收的总风险值为 X。在虚拟游戏中,每项投资风险值相加为总风险值;最多只能投资 2 个理财产品;最小单位为整数,不能拆分为小数;投资额 * 回报率 = 投资回报 [^1]。 ### 解题思路 由于最多只能投资 2 个理财产品,可采用枚举的方法。遍历所有可能的单个理财产品投资组合以及两两组合的情况,计算每种组合的总风险和总回报,筛选出总风险在可接受范围内的组合,从中找出回报最大的组合。 ### 示例代码(JavaScript) ```javascript function virtualGameFinance(m, N, X, products) { let maxReturn = 0; // 单个产品投资 for (let i = 0; i < m; i++) { const [risk, invest, rate] = products[i]; if (risk <= X && invest <= N) { const currentReturn = invest * rate; maxReturn = Math.max(maxReturn, currentReturn); } } // 两个产品投资 for (let i = 0; i < m; i++) { for (let j = i + 1; j < m; j++) { const [risk1, invest1, rate1] = products[i]; const [risk2, invest2, rate2] = products[j]; const totalRisk = risk1 + risk2; const totalInvest = invest1 + invest2; if (totalRisk <= X && totalInvest <= N) { const currentReturn = invest1 * rate1 + invest2 * rate2; maxReturn = Math.max(maxReturn, currentReturn); } } } return maxReturn; } // 示例调用 const m = 3; const N = 1000; const X = 10; const products = [ [3, 500, 0.1], [4, 300, 0.2], [6, 200, 0.3] ]; const result = virtualGameFinance(m, N, X, products); console.log(result); ```
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员阿甘

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

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

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

打赏作者

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

抵扣说明:

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

余额充值