题目描述
你有 nn 件道具可以买,其中第 ii 件的价格为 a_iai。
你有 ww 元钱。你仅能用钱购买其中的一件商道具。当然,你可以拿你手中的道具换取其他的道具,只是这些商道具的价值之和,不能超过你打算交换出去的道具。你可以交换无数多次道具。道具的价值可能是 00,但是你不能使用空集换取价值为 0 的商品。
请问,在这个条件下,最多可以换取多少件道具?
输入格式
第一行一个正整数 nn,表示道具个数。
接下来一行 nn 个正整数,表示 \{a_n\}{an}。
接下来一行 11 个正整数,表示 ww。
输出格式
一个正整数,表示答案。
输入输出样例
输入 #1复制
3 1 1 2 5
输出 #1复制
2
说明/提示
【样例解释】
买价值为 22 的道具,并交换为两个价值为 11 的道具。
【数据范围及约束】
测试数据满足,1 \leq n\leq10^61≤n≤106,0 \leq a_i\leq 10^90≤ai≤109,1 \leq w\leq2\times10^{9}1≤w≤2×109。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner inp = new Scanner(System.in);
int a = inp.nextInt();
int b[] = new int[a];
int maxs = -1;
for(int i=0;i<a;i++) {
b[i] = inp.nextInt();
}
int c = inp.nextInt();
List<Integer> list = new ArrayList<>();
for(int i=0;i<a;i++) {
if(b[i]<=c) {
list.add(b[i]);
}
}
if(list.size()==0) {
System.out.println(0);
return;
}
maxs = Collections.max(list);
Collections.sort(list);
System.out.print(dfs(list,maxs));
}
public static Integer dfs(List<Integer> list,Integer maxs) {
Integer i = 0;
Integer m = 0;
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
Integer j = iterator.next();
if(maxs>=m+j) {
m = j+m;
i++;
}else {
break;
}
}
return i;
}
}