2024-03-23:用go语言,一张桌子上总共有 n 个硬币 栈 。每个栈有 正整数 个带面值的硬币, 每一次操作中,你可以从任意一个栈的 顶部 取出 1 个硬币,从栈中移除它,并放入你的钱包里。
2024-03-23:用go语言,一张桌子上总共有 n 个硬币 栈 。每个栈有 正整数 个带面值的硬币,
每一次操作中,你可以从任意一个栈的 顶部 取出 1 个硬币,从栈中移除它,并放入你的钱包里。
给你一个列表 piles ,其中 piles[i] 是一个整数数组,
分别表示第 i 个栈里 从顶到底 的硬币面值。同时给你一个正整数 k。
请你返回在 恰好 进行 k 次操作的前提下,你钱包里硬币面值之和 最大为多少?
输入:piles = [[1,100,3],[7,8,9]], k = 2。
输出:101。
答案2024-03-23:
来自左程云。
大体过程如下:
1.初始化变量:定义一个 dp 数组用于记录计算过程中的最大值,长度为 k+1,初始值全为 0。
2.循环遍历每个栈 stack 在 piles 中:
2.1.对于每个栈 stack,从最大次数 k 开始递减到 1:
2.1.1.定义变量 sum 用于记录当前栈取出的硬币总和。
2.1.2.遍历从 1 到 min(栈的长度, 次数) 的取数次数 i:
2.1.2.1.计算当前次数下取的硬币总和并更新到 sum 中。
2.1.2.2.更新 dp[次数] 为当前 dp[次数] 与取出当前硬币后的最大值(sum + dp[次数-i])的较大者。
3.返回 dp[k],即完成 k 次操作后的最大硬币面值之和。
4.时间复杂度:
遍历每个栈需要 O(n) 的时间,n 为栈的数量。
每个栈内部的计算复杂度为 O(k * m),其中 m 为栈内硬币的数量。
因此,总的时间复杂度为 O(nkm)。
5.空间复杂度:
需要额外的
dp数组来存储计算所需的值,长度为 k+1,即 O(k) 的额外空间。因此,总的额外空间复杂度为 O(k)。
Go语言代码如下:
package main
import (
"fmt"
"math"
)
func maxValueOfCoins(piles [][]int, k int) int {
dp := make([]int, k+1)
for _, stack := range piles {
for w := k; w > 0; w-- {
var sum int
for i := 1; i <= int(math.Min(float64(len(stack)), float64(w))); i++ {
sum += stack[i-1]
dp[w] = int(math.Max(float64(dp[w]), float64(sum+dp[w-i])))
}
}
}
return dp[k]
}
func main() {
piles := [][]int{{1, 100, 3}, {7, 8, 9}}
k := 2
result := maxValueOfCoins(piles, k)
fmt.Println(result)
}

Python语言代码如下:
# -*-coding:utf-8-*-
def max_value_of_coins(piles, k):
dp = [0] * (k+1)
for stack in piles:
for w in range(k, 0, -1):
sum_val = 0
for i in range(1, min(len(stack), w)+1):
sum_val += stack[i-1]
dp[w] = max(dp[w], sum_val + dp[w - i])
return dp[k]
def main():
piles = [[1, 100, 3], [7, 8, 9]]
k = 2
result = max_value_of_coins(piles, k)
print(result)
if __name__ == "__main__":
main()

2024-03-23:用go语言,一张桌子上总共有 n 个硬币 栈 。每个栈有 正整数 个带面值的硬币, 每一次操作中,你可以从任意一个栈的 顶部 取出 1 个硬币,从栈中移除它,并放入你的钱包里。的更多相关文章
- 《C#并发编程经典实例》学习笔记—2.5 等待任意一个任务完成 Task.WhenAny
问题 执行若干个任务,只需要对其中任意一个的完成进行响应.这主要用于:对一个操作进行多种独立的尝试,只要一个尝试完成,任务就算完成.例如,同时向多个 Web 服务询问股票价格,但是只关心第一个响应的. ...
- java语言将任意一个十进制数数字转换为二进制形式,并输出转换后的结果
package com.llh.demo; import java.util.Scanner; /** * * @author llh * */ public class Test { /* * 将任 ...
- VIM 用正则表达式,非贪婪匹配,匹配竖杠,竖线, 匹配中文,中文正则,倒数第二列, 匹配任意一个字符 :
VIM 用正则表达式 批量替换文本,多行删除,复制,移动 在VIM中 用正则表达式 批量替换文本,多行删除,复制,移动 :n1,n2 m n3 移动n1-n2行(包括n1,n2)到n3行之下: ...
- pojg2744找一个最长的字符串x,使得对于已经给出的字符串中的任意一个y,x或者是y的子串,或者x中的字符反序之后得到的新字符串是y的子串。
http://poj.grids.cn/practice/2744 描述现在有一些由英文字符组成的大小写敏感的字符串,你的任务是找到一个最长的字符串x,使得对于已经给出的字符串中的任意一个y,x或者是 ...
- 【剑指offer】找出数组中任意一个重复的数字,C++实现
原创博文,转载请注明出处! # 题目 # 思路 对于长度为n的数组,范围为0~n-1的数字而言,如果不粗在重复数字,则排序后数组元素和数组角标相同.如果存在重复数字,则在排序的过程中会出现不同下标对应 ...
- 给定任意一个字符串,使用 for in 语句来统计字符出现的个数
//找出字符串中的数字 var str = 'haj123sdk54hask33dkhalsd879'; /*function findNum(str){ var arr = []; var tmp ...
- 获取页面中任意一个元素距离body的偏移量
//offSet:等同于jQuery中的offSet方法,获取页面中任意一个元素距离body的偏移量function offSet(curEle) { var totalLeft = null; va ...
- [java面试]逻辑推理6 10 18 32 下一个数?编程实现输入任意一个N位置,该数是多少?java实现
题目: 6 10 18 32 下一个数?编程实现输入任意一个N位置,该数是多少? 10 = 6 + 4 4 18 = 10 + 8 4 + 4 32 = 18 + 14 ...
- SQL得到任意一个存储过程的参数列表sp_procedure_params_rowset
SQL得到任意一个存储过程的参数列表sp_procedure_params_rowsetexec sp_procedure_params_rowset 'up_rpt营业收入汇总表' PROCEDUR ...
- 百度地图marker点击任意一个当前的变化,其余的marker不变
百度地图marker点击任意一个当前的变化,其余的marker不变 最近做的百度地图,遇到一个问题,就是在for循环里面执行marker的点击事件 没有可以比对的对象,每次点击marker的时候,i都 ...
随机推荐
- 如何实现一款好用的云图(word-cloud)生成工具?
创作背景 可以随时生成一副很酷的云图,一直是个人的梦想. 很久以前,写过一个简单版本:http://houbb.github.io/tools/wordCloud.html. 效果如下: 不过存在一些 ...
- OneCloud记录
配置信息 S805, 1G RAM, 8G ROM, USB2.0 * 2, 1GB LAN, SD Cardreader S805参数: 32-bit, ARMv7-A, Cortex-A5, 1. ...
- eclipse项目右击找不到build path
右击项目–>properties–>Project Facets–>勾选右侧的Java,然后保存. 此时再操作就有了.
- Java利用反射实现运行时方法调用
1.介绍 在这篇短文中,我们将快速了解如何在运行时使用Java反射API调用方法. 2.准备工作 来创建一个简单的类: public class Operations { public double ...
- java 打包jar文件实战
本文只介绍实用步骤,预备知识请自查阅: 参考资料: http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html http://w ...
- spring boot整合poi实现excel文件导入导出实战
今天科比离去,今天肺炎病毒持续肆虐... 意识到生命的脆弱,今天我继续前行,比以往更加坚定和紧迫,这辈子不活好自己就算白来一趟. 1.项目介绍 最近帮朋友做了一个小工具,就是实现:上传一个excel文 ...
- ckeditor使用技巧总结
介绍 官方开发者文档:CKEditor 4 documentation 技巧总结 1.挑选需要的插件,打包下载 参考:CKEditor 4.4.1 添加代码高亮显示插件功能--使用官方推荐Code S ...
- JavaCV解决deprecated pixel format used, make sure you did set range correctly 打印问题
虽然知道这个是原因,但有时候即使换了格式也还是打印,简直让人抓狂,就是不想打印这个怎么办呢? 其实很简单,只需要加上一行代码(这行代码虽然是C语言风格的,但是它确实是加在Java代码里的): //只打 ...
- win32- 函数运行速度测试
LARGE_INTEGER nFreq, t1, t2; int loop_count = 0; double dt; double time_sum = 0; QueryPerformanceFre ...
- 如何快速使用LayUI MINI框架
是什么 LayUI MINI是基于LayUI框架开发的一套最简洁.易用的后台框架模板,它已经是一个非常完整的脚手架,有现成的页面模板可以参考甚至是直接使用. 通常来说,如果我们准备开发一套管理系统的W ...