枚举其中一种可乐的数量(此处为蜂蜜可乐)记为j,另一种可乐的数量即为k = N - j,模拟直至无法进行兑换,取最大值即为答案。
粗略估一下时间复杂度为O(T * N * log),此处的log应该是与a和b相关的一个对数常数。最大的数据量大概在1E6到1E7左右,因此不会超时。
#include <iostream>
void solve(){
int n, a, b;
std::cin >> n >> a >> b;
int ans = 0;
for(int i = 0; i <= n; i++){
int j = i;
int k = n - j;
int res = n;
while(j >= a || k >= b){
if(j >= a){
k += j / a;
res += j / a;
j %= a;
}
if(k >= b){
j += k / b;
res += k / b;
k %= b;
}
}
ans = std::max(ans, res);
}
std::cout << ans << "\n";
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
int T = 1;
std::cin >> T;
for(int i = 0; i < T; i++){
solve();
}
return 0;
}

京公网安备 11010502036488号