问题简化:已知$x<y<m$,要求用$x$和$y$两个桶能构造出的小于$m$的最大牛奶量是多少。
我们可以这么想,先求出如果只用桶$x$答案是多少,然后每次用桶$x$的次数递减,再加上桶$y$能够倒剩下部分牛奶的量,每次循环取最大值即可。
#include <bits/stdc++.h>
using namespace std;
int main() {
int x, y, m; scanf("%d%d%d", &x, &y, &m);
int p = m / x, ans = m / x * x; //p是全部用x需要用的次数,ans是最大答案
while (p) {
p--; int res, o = m - x * p; //o是剩下的数量
o = o / y * y; res = x * p + o;
ans = max(res, ans);
} cout << ans << endl;
return 0;
}