背包问题:金银岛上的珍贵金属
题目描述
KID利用飞行器飞到了一个金银岛上,上面有许多珍贵的金属,KID虽然更喜欢各种宝石的艺术品,可是也不拒绝这样珍贵的金属。但是他只带着一个口袋,口袋至多只能装重量为'w' 的物品。岛上金属有's' 个种类, 每种金属重量不同,分别为'n_1,n_2,…,n_s',同时每个种类的金属总的价值也不同,分别为'v_1,v_2,…,v_s'。KID想一次带走价值尽可能多的金属,问他最多能带走价值多少的金属。注意到金属是可以被任意分割的,并且金属的价值和其重量成正比。
输入格式
多组数据,每组数据第一行一个正整数 'w(1≤w≤10000)',表示口袋承重上限。第二行一个正整数 's(1≤s≤100)',表示金属种类。第三行有 '2s' 个正整数,分别为'n_1,v_1,n_2,v_2,…,n_s,v_s' 分别为第一种,第二种,…,第 's' 种金属的总重量和总价值 '(1≤n_i≤10000,1≤v_i≤10000)'。
输出格式
每组数据输出一行,输出应精确到小数点后 '2' 位。
样例
输入样例: 2 50 4 10 100 50 30 7 34 87 100 10000 5 1 43 43 323 35 45 43 54 87 43
输出样例: 171.93 508.00
算法1
(贪心) O(nlogn)
本题与P1434基本相同。
排序后按单位重量价值递减顺序取物品即可。
时间复杂度
O(nlogn)
参考文献
python3 代码
# 待补充
C++ 代码
# 待补充
算法2
(暴力枚举) O(n^2)
blablabla
时间复杂度
参考文献
C++ 代码
# 待补充
原文地址: https://www.cveoy.top/t/topic/obEn 著作权归作者所有。请勿转载和采集!