把数组按照特殊值的大小降序排列,然后一边模拟,一边判断当前元素加入进来是否能保证特殊元素总和>=总的元素和的一半,如果可以,就加入,不可以,直接退出循环(因为后面的就更不可能满足条件)
C++
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
小红喜欢魔术,现在有 n 个魔术道具,这些道具由不同的物品组成。其中第i个道具包含ai个特殊元素,包含bi个普通元素。
小红想最大化他的魔术表演,但他的魔术需要特殊元素所占的比例不能低于一半。
小红需要选择一些道具,将它们的特殊元素混合在一起,问小红最多可以得到多少特殊元素用作魔术表演?
一行一个整数n,表示道具的数量。
接下来一行,n个整数a1,a2,...,an,表示第i个道具包含ai个特殊元素。
接下来一行,n个整数b1,b2,....,bn,表示第i个道具包含bi个普通元素。
1≤n≤105
0≤ai,bi≤100
ai+bi=100
一行一个整数,表示小红最多可以得到的特殊元素数量。
输入
3
50 60 30
50 40 70
输出
110
说明
选择第一和第二个道具,可以得到110个特殊元素。