伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

2021-03-04:一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的金条,不管

来源:本站原创 浏览:105次 时间:2022-09-30

2021-03-04:一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的金条,不管怎么切,都要花费20个铜板。 一群人想整分整块金条,怎么分最省铜板? 例如,给定数组{10,20,30},代表一共三个人,整块金条长度为60,金条要分成10,20,30三个部分。如果先把长度60的金条分成10和50,花费60; 再把长度50的金条分成20和30,花费50;一共花费110铜板。但如果先把长度60的金条分成30和30,花费60;再把长度30金条分成10和20, 花费30;一共花费90铜板。输入一个数组,返回分割的最小代价。

福哥答案2021-03-04:

小根堆。
1.数组全部放入小根堆。
2.pop两个数并且相加,和为S。
3.结果里加上S。
4.把S放进小根堆里。
5.重复步骤2。直到数组的长度为1,停止循环。
有代码。

代码用golang编写,代码如下:

package mainimport (    "container/heap"    "fmt"    "sort")func main() {    arr := []int{10, 30, 20}    ret := lessMoney(arr)    fmt.Println(ret)}func lessMoney(arr []int) int {    arrLen := len(arr)    if arrLen <= 1 {        return 0    }    h := IntHeap(arr)    heap.Init(&h)    ans := 0    twosum := 0    for i := 1; i < arrLen; i++ {        twosum = heap.Pop(&h).(int) + heap.Pop(&h).(int)        ans += twosum        heap.Push(&h, twosum)    }    return ans}//小根堆type IntHeap sort.IntSlicefunc (c IntHeap) Len() int           { return len(c) }func (c IntHeap) Less(i, j int) bool { return c[i] < c[j] }func (c IntHeap) Swap(i, j int)      { c[i], c[j] = c[j], c[i] }func (c *IntHeap) Push(x interface{}) {    *c = append(*c, x.(int))}func (c *IntHeap) Pop() interface{} {    old := *c    n := len(old)    x := old[n-1]    *c = old[0 : n-1]    return x}

执行结果如下:


左神java代码
评论

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net