3 条题解
-
0
假设现在得到了 [0,s−1] 内的所有整数,如果此时新发现了一个整数 x,那么把 x 加到已得到的数字中,就得到了 [x,s+x−1]内的所有整数。
分类讨论:
-
如果 x≤s,那么合并这两个区间,我们可以得到 [0,s+x−1] 内的所有整数。
-
如果 x>s,这意味着我们无法得到 s,那么就一定要把 s 加到数组中(加一个比 s 还小的数字就没法得到更大的数,不够贪),这样就可以得到 [s,2s−1]内的所有整数,再与 [0,s−1]合并,可以得到 [0,2s−1] 内的所有整数。然后再重新考虑 x 和 s 的大小关系,继续分类讨论。
把 coins排序,从小到大考虑 x=coins[i]。按照上述分类讨论来看是否要添加数字。
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n=sc.nextInt(); int[] coins=new int[n]; int t=sc.nextInt(); for(int i=0;i<n;i++){ coins[i]=sc.nextInt(); } Arrays.sort(coins); int ans = 0, s = 1, i = 0; while (s <= t) { if (i < coins.length && coins[i] <= s) { s += coins[i]; i++; } else { s *= 2; ans++; } } System.out.println(ans); } }
-
信息
- ID
- 594
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 32
- 已通过
- 7
- 上传者