喝可乐

喝可乐

https://ac.nowcoder.com/acm/contest/11210/E

思路
枚举第一次选择的所有可能的情况,当第一次的情况确定后,就能获得这种情况能喝到的饮料数,取最大值即可
代码

#include<bits/stdc++.h>
using namespace std;
int t, n, a, b;
inline int pan(int x, int y)
{
    int ans = n;
    //  b, a
    int u, v;
    while (x >= a || y >= b) {
        u = x / a;//换b
        v = y / b;//换a
        ans += u + v;
        x = x % a + v;
        y = y % b + u;
    }
    return ans;
}
void solve()
{
    cin >> n >> a >> b;
    int ans = 0;
    for (int i = 0; i <= n; ++i) {//第一次选择的情况
        //取最大值
        ans = max(ans, pan(i, n - i));
    }
    cout << ans << endl;
}
int main()
{

    cin >> t;
    while (t--) solve();
    return 0;
}
全部评论
因为这题的两种可乐瓶盖可以互相兑换,无法确定最佳的贪心策略,就只能暴力枚举所有情况,得出最大值
点赞 回复 分享
发布于 2021-04-19 15:03
为什么不能用贪心啊,直接全部都是买花费比较小的那个,然后剩下的钱买花费比较大的
点赞 回复 分享
发布于 2021-04-19 11:31

相关推荐

点赞 评论 收藏
分享
牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务