挑战程序设计竞赛2 算法与数据结构5.6

5.6 搜索的应用----计算最优解

package main

import (
    "fmt"
    "os"
)
var n, k int
var MAX = 100000
var T = make([]int64, MAX)

//k辆车最大能运载为P的卡车能装多少货物
func check(P int64) int {
    var i int
    for j := 0; j < k; j++ {
        var s int64
        for s+T[i] <= P {
            s += T[i]
            i++
            if i == n {
                return n
            }
        }
    }
    return i
}
func solve() int64 {
    var left, right, mid int64 = 0, 100000*10000, 0

    for right-left > 1 {
        mid = (left + right) / 2
        v := check(mid)
        if v >= n {
            right = mid
        } else {
            left = mid
        }
    }
    return right
}
//初始化程序,设置从文件读取
func init()  {
    out, _ := os.OpenFile("./challenge/5_6.out", os.O_WRONLY|os.O_CREATE,0755)
    fin, _ := os.OpenFile("./challenge/5_6.in", os.O_RDONLY,0755)
    os.Stdout = out
    os.Stderr = out
    os.Stdin=fin
}
func main() {
    fmt.Scanf("%d %d", &n, &k)
    for i := 0; i < n; i++ {
        fmt.Scanf("%d", &T[i])
    }
    ans := solve()
    fmt.Println(ans)
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容