加勒比海盗寻宝:最少价值金币
"题目描述"\n最厉害的加勒比海盗杰克船长驾驶着他的黑珍珠号海盗船,找到了一个装满宝藏的藏宝洞。藏宝洞里面有 N(N≤100) 堆金币,第 i堆金币的总重量和总价值分别是 mi,vi(1≤mi,vi≤100)。黑珍珠号的承重量为 T(T≤1000)。为了长远发展,所以他决定带走尽可能少价值的金币,但是他要求必须装满。所有金币都可以随意分割,分割完的金币重量价值比(也就是单位价值)不变。请问杰克船长最少可以拿走多少价值的金币?\n\n"输入描述"\n第一行两个整数N,T。\n\n接下来N行,每行两个整数mi,vi。\n\n"输出描述"\n一个实数表示答案,保留两位小数。\n\n"样例1"\n"输入"\n4 50\n10 60\n20 100\n30 100\n15 45\n"输出"\n170.00\n"提示"\n先运行一下,看看和样例匹不匹配,在输出,不要把错误的答案交给我\n"内容:"\n"思路:"\n1. 将输入的金币堆按照单位价值从小到大排序。\n2. 初始化当前总重量为0,当前总价值为0。\n3. 从单位价值最小的金币堆开始,依次尝试将金币堆放入船上。\n4. 如果当前总重量加上当前金币堆的重量小于等于承重量T,将当前金币堆的重量和价值都加到当前总重量和总价值上。\n5. 如果当前总重量加上当前金币堆的重量大于承重量T,计算差值d,将差值d按照当前金币堆的单位价值进行拆分,将相应的重量和价值加到当前总重量和总价值上。\n6. 重复步骤4和步骤5,直到所有金币堆都尝试完毕。\n7. 输出当前总价值,保留两位小数。\n\n"时间复杂度分析:"\n排序需要O(NlogN)的时间,遍历金币堆需要O(N)的时间,因此总时间复杂度为O(NlogN)。\n\n"空间复杂度分析:"\n除了输入和输出所需的额外空间外,只需要常数级别的额外空间,因此空间复杂度为O(1)。\n\n"实现代码如下:"\n
原文地址: https://www.cveoy.top/t/topic/pNxq 著作权归作者所有。请勿转载和采集!