会员专享
请先
登录,登录后可使用今日免费解锁;
开通会员,或
购买
该题目所属题库
,可解锁完整内容。
解题思路
每次只能二选一:对选中的数减 A,或者对其余数减 B。设第一种做了 ti 次、第二种做了 si 次,第二种总次数 S=∑si,则第 i 个数被减掉 Ati+B(S−si)。
- n=1 时第二种操作打不到任何人,答案就是 ⌈a1/A⌉。
- 只做第一种:答案是 ∑⌈ai/A⌉,作为上界。
- 只做第二种:每个数至少要被打中 ⌈ai/B⌉ 次,总击中次数是 S(n−1),因此
S=max(max⌈ai/B⌉, ⌈∑⌈ai/B⌉/(n−1)⌉) 一定可行。
- 混合时枚举 S。先假装每个数都被打中 S 次,剩下的用减 A 补,得到 T0。但第二种操作每次都会让一个下标豁免,共 S 次豁免。能免费消化的豁免先填掉;多出来的全部堆到同一个下标上(因为 B<A,摊开只会更亏),取额外减 A 次数最少的那种堆法。
数组变为非正
题目内容
给定长度为 n 的数组 a1,a2,…,an,以及两个整数 A 和 B,保证 A>B。
每一次操作必须先选定一个下标 i,再从下面两种里选恰好一种:
- 将 ai 减去 A。
- 将除 ai 以外的每个数都减去 B。
请计算最少多少次操作,能让数组中所有数都变成非正数(小于等于 0)。减成负数是允许的。
输入描述
第一行一个整数 n,表示数组长度。(1≤n≤200)
第二行两个整数 A 和 B。(1≤B<A≤109)
第三行 n 个整数 ai。(1≤ai≤105)
输出描述
输出一个整数,表示最少操作次数。
样例1
输入
3
6 4
3 7 3
输出
2
说明
- 第一次选第 1 个数,用第二种操作,数组变成 [3,3,−1]。
- 第二次选第 3 个数,再用第二种操作,数组变成 [−1,−1,−1]。
- 只对单个数减 A 至少要 4 次,所以 2 次更优。
样例2
输入
1
7 2
20
输出
3
说明
只有一个数时,第二种操作不会改到任何元素,只能反复减 A,需要 ⌈20/7⌉=3 次。