这题就把“空瓶换可乐”当成状态转移:先枚举初始买了多少瓶蜂蜜(剩下是生姜),然后一直兑换到不能换为止,取能喝最多的方案。
为了快一点,每次不是换一瓶,而是同一种能换多少就一次性全换,这样循环次数很少,整体基本就是 O(n)。

void solve(){
	int n,a,b;cin>>n>>a>>b;
    ll mx=0;
    for(int i=0;i<=n;++i){
        int h=i,g=n-i;
        ll c=0;
        while(h>=a||g>=b){
            if(h>=a&&(g<b||a<=b)){
                int t=h/a;
                h-=t*a;
                g+=t;
                c+=t;
            }else{
                int t=g/b;
                g-=t*b;
                h+=t;
                c+=t;
            }
        }
        mx=max(mx,c);
    }
    cout<<n+mx<<endl;
}