首页 > 其他分享 >2024-01-27:用go语言,阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有N堆金币, 第i堆金币的总重量和总价值分别是m[i]、v[i], 阿里巴巴有一个承重量为T的背包,但并不一定有办法将全部的

2024-01-27:用go语言,阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有N堆金币, 第i堆金币的总重量和总价值分别是m[i]、v[i], 阿里巴巴有一个承重量为T的背包,但并不一定有办法将全部的

时间:2024-01-27 17:22:28浏览次数:42  
标签:ii 阿里巴巴 inputs 藏宝洞 金币 mv MAXN ans

2024-01-27:用go语言,阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有N堆金币,

第i堆金币的总重量和总价值分别是m[i]、v[i],

阿里巴巴有一个承重量为T的背包,但并不一定有办法将全部的金币都装进去,

他想装走尽可能多价值的金币,

所有金币都可以随意分割,分割完的金币重量价值比(也就是单位价格)不变。

请问阿里巴巴最多可以拿走多少价值的金币?

答案2024-01-27:

来自左程云

灵捷3.5

大体过程如下:

1.初始化变量和输入数据:

  • 声明常量 MAXN,并赋值为 101。

  • 定义二维数组 mv,大小为 [MAXN][2],用于存储金币的重量和价值。

  • 定义变量 n 和 t,分别表示金币堆数和背包的最大承重。

  • 初始化输入数据 inputs 和指针变量 ii。

2.读取金币堆的重量和价值:

  • 使用循环从输入数据中读取金币堆的重量和价值,并将其存储到数组 mv 中。

3.按照单位价格进行排序:

  • 使用 sort.Slice 函数对 mv 数组进行排序,排序规则为单位价格从高到低。

4.背包装金币:
4.1.初始化变量 ans(总价值)为 0.0,used(已使用的背包承重)为 0。
4.2.使用循环遍历金币堆:

4.2.1.若将当前金币堆放入背包不超过最大承重,则将其重量累加到 used,价值累加到 ans。

4.2.2.否则跳出循环。

4.3.如果跳出循环前仍有剩余的金币堆:

4.3.1.计算剩余空间可以容纳的金币部分的比例(剩余承重 / 剩余金币堆重量)。

4.3.2.将该比例乘以剩余金币堆的价值,累加到 ans。

5.输出结果:

  • 使用 fmt.Printf 函数打印 ans,保留两位小数。

总的时间复杂度为 O(n log n),其中 n 是金币堆的数量。这是因为排序操作的时间复杂度为 O(n log n)。

总的额外空间复杂度为 O(1),因为除了输入数据和一个固定大小的数组,没有使用额外的空间。

go完整代码如下:

package main

import (
	"fmt"
	"sort"
)

const MAXN = 101

var mv [MAXN][2]int
var n, t int

func main() {
	inputs := []int{4, 50,
		10, 60,
		20, 100,
		30, 120,
		15, 45}
	ii := 0

	n = inputs[ii]
	ii++
	t = inputs[ii]
	ii++

	for i := 0; i < n; i++ {
		mv[i][0] = inputs[ii]
		ii++
		mv[i][1] = inputs[ii]
		ii++
	}

	sort.Slice(mv[:n], func(i, j int) bool {
		return mv[j][1]*mv[i][0] < mv[i][1]*mv[j][0]
	})

	ans := 0.0
	used := 0
	i := 0
	for i = 0; i < n && used+mv[i][0] <= t; i++ {
		used += mv[i][0]
		ans += float64(mv[i][1])
	}
	if i < n {
		ans += float64(mv[i][1]) * float64(t-used) / float64(mv[i][0])
	}
	fmt.Printf("%.2f\n", ans)

}

在这里插入图片描述

python完整代码如下:

# -*-coding:utf-8-*-

MAXN = 101

inputs = [4, 50,
          10, 60,
          20, 100,
          30, 120,
          15, 45]
ii = 0

n = inputs[ii]
ii += 1
t = inputs[ii]
ii += 1

mv = [[0, 0] for _ in range(MAXN)]

for i in range(n):
    mv[i][0] = inputs[ii]
    ii += 1
    mv[i][1] = inputs[ii]
    ii += 1

mv.sort(key=lambda x: x[1]*x[0] < x[0]*x[1], reverse=True)

ans = 0.0
used = 0
i = 0
for i in range(n):
    if used + mv[i][0] <= t:
        used += mv[i][0]
        ans += mv[i][1]
    else:
        break

if i < n:
    ans += mv[i][1] * (t - used) / mv[i][0]

print("{:.2f}".format(ans))


在这里插入图片描述

标签:ii,阿里巴巴,inputs,藏宝洞,金币,mv,MAXN,ans
From: https://www.cnblogs.com/moonfdd/p/17991686

相关文章

  • 机甲战队国服无限金币ios版本
    机甲战队国服无限金币ios版本机甲战队国服无限金币ios版本机甲战队国服无限金币ios版本机甲战队国服无限金币ios版本机甲战队国服无限金币ios版本免费,专业刷金,进战队战队!!!!!!!!三天稳定1000金币,氪金党勿入,肝佬欢迎进入,目前国服金价一月免费肝1万金币,一起开黑刷金请进qq群947633......
  • 流量如潮却成谜?揭秘阿里巴巴产品面试:提升转化率的黄金法则!
    导读大家好,我是小米,一个热爱分享技术、热衷于产品经验分享的小伙伴。最近,我在准备阿里巴巴的产品面试时遇到了一个经典问题:“产品流量有了,但转化率低,怎么提高转化?”这个问题其实是产品运营中的一大难题,今天我们就一起来深度解析,找到解决之道。引言在互联网时代,流量是产品的命脉,但流......
  • 揭秘阿里巴巴:如何通过API实时捕获中国市场商品数据
    一、引言随着电子商务的迅猛发展,实时数据获取在商业决策中扮演着越来越重要的角色。阿里巴巴中国站作为国内领先的B2B平台,提供了丰富的API接口供开发者使用。本文将重点介绍如何通过阿里巴巴中国站的按关键字搜索商品API实现实时数据获取,并给出相应的代码示例。二、按关键字搜索商......
  • 阿里巴巴中国站1688商品详情API实时数据获取:从零基础到精通的全程指南
    一、引言随着电子商务的快速发展,实时数据获取在商业决策中扮演着越来越重要的角色。阿里巴巴中国站作为国内领先的B2B平台,提供了丰富的API接口供开发者使用。本文将重点介绍如何通过阿里巴巴中国站的1688商品详情API实现实时数据获取,并给出相应的代码示例。二、1688商品详情API介绍......
  • 【教3妹学编程-算法题】购买水果需要的最少金币数
    3妹:“你不是真正的快乐,你的笑只是你穿的保护色”2哥 :3妹还在唱五月天的歌啊,你不知道五月天假唱,现在全网都在骂呢。3妹:知道啊,可是关我什么事,这个歌的确好听啊。2哥 :嗯嗯,不错,还以为你是脑残粉,无论黑白都只管追星呢。3妹:我是只管追歌的,歌好听就行啦。2哥 :追哥?追哪个哥,难......
  • 阿里巴巴宣布分红 25 亿美元;苹果故意降低 iPhone 性能被判赔偿丨 RTE 开发者日报 Vol.
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表......
  • NOIP2015普及组金币
    NOIP2015普及组金币题目数据(n<=10000)根据题目要求与我们原来学过的打印数字三角形图形很相似。数字三角形如下,数字可以对应成天数:12 34  5  67  8  9  10每天加的金币就是行坐标即可:12  23  3  34  4  4  4代码如何:#includ......
  • 阿里巴巴普惠体 2.0; 阿里巴巴普惠体 3.0 Alibaba-PuHuiTi-B 下载地址
    阿里巴巴普惠体3.0阿里巴巴普惠体是一套全球永久免费正版商用的字体家族。阿里巴巴普惠体3.0为一套符合新国家标准GB18030-2022的简体中文字符集,包含GB18030-2022强制规范三个实现级别:实现级别1+实现级别2标准规格的7字重、实现级别3标准规格的Regular单一字重。7字重共194,460个全......
  • 阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义
    常用文件夹分层pojovo:与前端交互的所有对象,包括接参和返回query:查询的筛选条件,前端传参和后端内部传参通用dto:后端内部传参专用分层缘由分层领域模型规约:DO:数据对象,与数据库看表结构对应。DTO:数据传输对象,业务层向外传输对象BO:业务对象,由业务层输出的业务逻......
  • QT实战 之翻金币游戏
    QT实战之翻金币游戏相较于原版的优化:关卡数据不是用静态的config配置,而是动态生成,每次打开的关卡都生成不同的游戏数据,增加了可玩性;关卡数据依据关卡等级的不同而生成不同难度的数据,随关卡的增加而不断提升难度;金币矩阵由原版的4*4升级为5*5,增加了游戏难度;选择关卡按钮使用......