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