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:
来自左程云。
大体过程如下:
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的背包,但并不一定有办法将全部的的更多相关文章
- asp.net C# 未能加载文件或程序集或它的某一个依赖项。需要强名称程序集。的解决办法
asp.net C# 未能加载文件或程序集或它的某一个依赖项.需要强名称程序集.的解决办法 出现这个错误是原因:是有签名的DLL引用了无签名的DLL 如上图所示,就是因为引用Entity.MVCEnt ...
- (转)要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。”的解决办法。
要“jquery”ScriptResourceMapping.请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping.”的解决办法. 1.先将aspnet.scri ...
- 堆排序(大顶堆、小顶堆)----C语言
堆排序 之前的随笔写了栈(顺序栈.链式栈).队列(循环队列.链式队列).链表.二叉树,这次随笔来写堆 1.什么是堆? 堆是一种非线性结构,(本篇随笔主要分析堆的数组实现)可以把堆看作一个数组,也可以被 ...
- 【计理05组01号】R 语言基础入门
R 语言基本数据结构 首先让我们先进入 R 环境下: sudo R 赋值 R 中可以用 = 或者 <- 来进行赋值 ,<- 的快捷键是 alt + - . > a <- c(2 ...
- 【工具向01】——markdown 文本编辑语言相关
markdown简介 Markdown是一种轻量级标记语言创始人为约翰·格鲁伯.它允许人们"使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML或HTML文档".这种语言吸 ...
- (Go)01.Windows 安装 Go语言开发环境以及使用
一.Go语言下载 go语言官方下载地址:https://golang.org/dl/ 找到适合你系统的版本下载,本人下载的是windows msi版本.也可以下载Source自己更深层次研究go语言 ...
- 01.为什么要学习Go语言
为什么互联网世界需要Go语言 世界上已经有太多太多的编程语言了,为什么又出来一个Go语言? 硬件限制:摩尔定律已然失效 摩尔定律:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会 ...
- 嵌入式学习-c语言篇01:搭建C语言环境
使用NotePad++和gcc编译器来搭建c语言环境 NotePad++:C语言编码器 gcc:C语言编译器 这两个软甲可以去官网下载 下载好进入该文件夹,如图: 添加环境变量:直接cmd,运行gcc ...
- [2014.01.27]wfPrintOcx 票据打印控件 v5.3
支持选择打印机,并自动记忆选择的打印机. 适合打印各类票据格式. 支持画正方形.长方形.圆形.椭圆.横线.竖线.HTTP图片. 支持数字金额转换成中文大写金额. 可以设置固定宽度的文字自动换行. 组件 ...
- [2014.01.27]wfGifAnimator 动画GIF组件 3.0
组件支持设置GIF帧延时和获取GIF的帧延迟. 组件支持添加或插入或更新帧(支持bmp/jpg/gif/wmf/emf/ico格式).删除帧.清空帧操作. 组件支持GIF动画缩放大小. 组件支持绘制线 ...
随机推荐
- Solon v1.11.3 发布,第101个发布版本喽
一个更现代感的 Java 应用开发框架:更快.更小.更自由.没有 Spring,没有 Servlet,没有 JavaEE:独立的轻量生态.主框架仅 0.1 MB. @Controller public ...
- .Net Core 中 MemoryCache 使用
1.Demo,实际项目中不这么使用 class Program { static void Main(string[] args) { //缓存的配置 MemoryCacheOptions cache ...
- 多线程 ThreadPoolTaskExecutor 应用
1.如何判断线程池所有任务是否执行完毕 package com.vipsoft.web; import org.junit.jupiter.api.Test; import org.slf4j.Log ...
- 自媒体时代的贤内助——AI 视频云
视频,通常是一段由活动画面组成的传递信息的内容.在如今这个信息爆炸的时代,我们每天都要在浩瀚的内容海洋中寻找需求的信息.一个视频是否吸引人内容固然是最重要的,但是播放是否流畅,画质是否清晰的影响力也不 ...
- Codeforce :466C. Number of Ways (数学)
https://codeforces.com/problemset/problem/466/C 解题说明:此题是一道数学题,若平分分成若干种情况,应当整体(sum)考虑,对sum/3进行分析.它是区分 ...
- 利用PE工具箱安装WINDOWS系统
一. 进入PE系统 U盘插入电脑,开机多次按F12(联想F12,华硕ESC,DELL F9,微星F11,大部分都是这样,实在不行就按F2进BIOS改)键进入类似如下图界面,选择U盘启动,(能选UE ...
- Spring EL 表达式
本篇讲述了Spring Expression Language -- 即Spring3中功能丰富强大的表达式语言,简称SpEL. SpEL是类似于OGNL和JSF EL的表达式语言,能够在运行时构建复 ...
- 版本升级 | v1.0.12发布,许可证风险早知道
新版本来啦~~~~ 一.v1.0.12更新内容 优化许可证检出功能,可通过JSON / HTML / SPDX 报告获知许可证信息 支持HTML报告自定义分页 二.更新说明 1. 优化许可证检出功能, ...
- 云原生 Serverless Database 使用体验
作者 | 李欣 近十年来互联网技术得到了飞速的发展,越来越多的行业加入到了互联网的矩阵,由此带来了更为丰富且复杂的业务场景需求,这对于数据应用系统的性能无疑是巨大的挑战. 关系型数据库 MySQL ...
- XSS、CSRF 以及如何防范