DP(吧?)
#include <iostream>
#include <cstring>
#define max(x,y) (x>y?x:y)
using namespace std;
int Ach,Bch;
long long DP(int ap,int bp)
{
if(ap<Ach&&bp<Bch)
return 0;
long long ans=-1;
if(bp/Bch>0)//原本是跑i=1->bp/Bch 但是TLE 結果直接換bp/Bch就AC了= = 他是有一個greedy的想法說這樣換一定最好嗎?
ans=max(ans,DP(ap+(long long)(bp/Bch),bp-(long long)(bp/Bch)*Bch)+bp/Bch);
if(ap/Ach>0)
ans=max(ans,DP(ap-(long long)(ap/Ach)*Ach,bp+(long long)(ap/Ach))+ap/Ach);
return ans;
}
int main()
{
int T,x;
cin>>T;
while(T--)
{
cin>>x>>Ach>>Bch;
long long ans=-1;
for(int i=0;x-i>=i;i++)
ans=max(ans,max(DP(x-i,i)+x,DP(i,x-i)+x));
cout<<ans<<endl;
}
return 0;
}