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))

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

  1. asp.net C# 未能加载文件或程序集或它的某一个依赖项。需要强名称程序集。的解决办法

    asp.net C# 未能加载文件或程序集或它的某一个依赖项.需要强名称程序集.的解决办法 出现这个错误是原因:是有签名的DLL引用了无签名的DLL 如上图所示,就是因为引用Entity.MVCEnt ...

  2. (转)要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。”的解决办法。

    要“jquery”ScriptResourceMapping.请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping.”的解决办法. 1.先将aspnet.scri ...

  3. 堆排序(大顶堆、小顶堆)----C语言

    堆排序 之前的随笔写了栈(顺序栈.链式栈).队列(循环队列.链式队列).链表.二叉树,这次随笔来写堆 1.什么是堆? 堆是一种非线性结构,(本篇随笔主要分析堆的数组实现)可以把堆看作一个数组,也可以被 ...

  4. 【计理05组01号】R 语言基础入门

    R 语言基本数据结构 首先让我们先进入 R 环境下: sudo R 赋值 R 中可以用 = 或者 <- 来进行赋值 ,<- 的快捷键是 alt + - . > a <- c(2 ...

  5. 【工具向01】——markdown 文本编辑语言相关

    markdown简介 Markdown是一种轻量级标记语言创始人为约翰·格鲁伯.它允许人们"使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML或HTML文档".这种语言吸 ...

  6. (Go)01.Windows 安装 Go语言开发环境以及使用

    一.Go语言下载 go语言官方下载地址:https://golang.org/dl/ 找到适合你系统的版本下载,本人下载的是windows msi版本.也可以下载Source自己更深层次研究go语言 ...

  7. 01.为什么要学习Go语言

    为什么互联网世界需要Go语言 世界上已经有太多太多的编程语言了,为什么又出来一个Go语言? 硬件限制:摩尔定律已然失效 摩尔定律:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会 ...

  8. 嵌入式学习-c语言篇01:搭建C语言环境

    使用NotePad++和gcc编译器来搭建c语言环境 NotePad++:C语言编码器 gcc:C语言编译器 这两个软甲可以去官网下载 下载好进入该文件夹,如图: 添加环境变量:直接cmd,运行gcc ...

  9. [2014.01.27]wfPrintOcx 票据打印控件 v5.3

    支持选择打印机,并自动记忆选择的打印机. 适合打印各类票据格式. 支持画正方形.长方形.圆形.椭圆.横线.竖线.HTTP图片. 支持数字金额转换成中文大写金额. 可以设置固定宽度的文字自动换行. 组件 ...

  10. [2014.01.27]wfGifAnimator 动画GIF组件 3.0

    组件支持设置GIF帧延时和获取GIF的帧延迟. 组件支持添加或插入或更新帧(支持bmp/jpg/gif/wmf/emf/ico格式).删除帧.清空帧操作. 组件支持GIF动画缩放大小. 组件支持绘制线 ...

随机推荐

  1. DataLeap的全链路智能监控报警实践(二):概念介绍

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 概念介绍 基线监控 根据监控规则和任务运行情况,DataLeap的基线监控能够决策是否报警.何时报警.如何报警以及 ...

  2. 火山引擎 DataTester:5 个优化思路,构建高性能 A/B 实验平台

    导读:DataTester 是由火山引擎推出的 A/B 测试平台,覆盖推荐.广告.搜索.UI.产品功能等业务应用场景,提供从 A/B 实验设计.实验创建.指标计算.统计分析到最终评估上线等贯穿整个 A ...

  3. 人工智能聊天DEMO

    import urllib.parse import requests #调用机器人接口 def qingyunke(msg): url = "http://api.qingyunke.co ...

  4. 【论文笔记#2】Farseg++:用于高空间分辨率遥感图像地理空间对象分割的前景感知关系网络

    论文来源 IEEE Transactions on Pattern Analysis and Machine Intelligence 作者 Zhuo Zheng; Yanfei Zhong; Jun ...

  5. 手把手教你配置JupyterLab 环境

    Python 代码编辑器怎么选?PyCharm.VS Code.Jupyter Notebook 都各有特色. 对于大型代码库,最好还是用传统的 IDE 比较靠谱,但是数据分析等需要可视化操作的场景下 ...

  6. Android WebView 踩坑日记,字体怎么突然变小了???

    背景 最近,端内在做 webView 统一的时候,个性签名中的 WebView 替换为 CustomWebView 之后,发现字体突然变小. 一开始不知道是什么原因,通过二分法查找最近的提交,排查之后 ...

  7. c中常用的字符串操作

    c中常用的字符串操作 头文件:<string.h> 1.strchr()查找某字符在字符串中首次出现的位置 strchr() 用来查找某字符在字符串中首次出现的位置,其原型为: char ...

  8. ME51N 创建采购申请

    1业务说明 当寻源后,将寻源结果汇总,并创建采购申请,之后据此创建采购订单. 此文档使用BAPI:BAPI_REQUISITION_CREATE创建采购申请 2前台实现 事务代码:ME51N 3代码实 ...

  9. 倾斜摄影技术构建图扑 WebGIS 智慧展馆

    前言 智慧展馆通过"云大物移智链"等技术将"物"(展品.设备.环境等)进行互联,并感知"人"(工作人员.观众等)的行为.结合 GIS.BIM ...

  10. 通义千问预体验,如何让 AI 模型应用“奔跑”在函数计算上?

    立即体验基于函数计算部署通义千问预体验: https://developer.aliyun.com/topic/aigc_fc AIGC 浪潮已来,从文字生成到图片生成,AIGC 的创造力让人惊叹,更 ...