题目描述

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基本相同。

排序后按单位重量价值递减顺序取物品即可。

时间复杂度

参考文献

python3 代码

C++ 代码

算法2

(暴力枚举) $O(n^2)$

blablabla

时间复杂度

参考文献

C++ 代

某天KID利用飞行器飞到了一个金银岛上上面有许多珍贵的金属KID虽然更喜欢各种宝石的艺术品可是也不拒绝这样珍贵的金属。但是他只带着一个口袋口袋至多只能装重量为w的物品。岛上金属有s个种类 每种金属重量不同分别为n_1n_2n_s同时每个种类的金属总的价值也不同分别为v_1v_2v_s。KID想一次带走价值尽可能多的金属问他最多能带走价值多少的金属。注意到金属是可以被任意分割的并且金属的价值和其重量

原文地址: https://www.cveoy.top/t/topic/fkJS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录