三、完善程序(单选题,每小题3分,共计30分)
(1)(分数背包)小S有n块蛋糕,编号从1到n。第i块蛋糕的价值是雄, 体积是引。他有一个大小为B的盒子来装这些蛋糕,也就是说装入盒子的 蛋糕的体积总和不能超过B。
他打算选择一些蛋糕装入盒子,他希望盒子里装的蛋糕的价值之和尽量 大。
为了使盒子里的蛋糕价值之和更大,他可以任意切割蛋糕。具体来说,他 可以选择一个a (0<a<L),并将一块价值是w,体积为v的蛋糕切割成两 块,其中一块的价值是a*w,体积是a*v,另一块的价值是(L-a)*w,体 积是(L-a)*v.他可以重复无限次切割操作。
现要求编程输出最大可能的价值,以分数的形式输出。
比如n=3, B=8,三块蛋糕的价值分别是4、4、2,体积分别是5、3、2。 那么最优的方案就是将体积为5的蛋糕切成两份,一份体积是3,价值是 2.4,另一份体积是2,价值是1.6,然后把体积是3的那部分和后两块蛋 糕打包进盒子。最优的价值之和是8.4,故程序输出42/5。
输入的数据范围为:1<=n<=1000,1<=B<=10^5,1<=w,v<=100;
提示:将所有的蛋糕按照性价比的wi/vi从大到小排序后进行贪心选择。 试补全程序。