题意如图:
根据题意会发现
肯定会剩下一个人血量大于0;
枚举是谁即可。
然后针对y和z血量小于0的情况
枚举y和z对战的次数即可。
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+15;
typedef long long ll;
int main()
{
ll t,x,y,z;
cin>>t;
while(t--)
{
cin>>x>>y>>z;
if(x<y)
swap(x,y);
if(y<z)
swap(y,z);
if(x<y)
swap(x,y);
ll anp=100000;
for(int k=0;k<=1000;k++)
{
ll l1=1000-k*y;
ll l2=1000-k*z;
if(l1<0)
l1=0;
if(l2<0)
l2=0;
ll an=k;
ll op1=l1/x;
if(l1%x)
op1++;
ll op2=l2/x;
if(l2%x)
op2++;
an=an+op1+op2;
anp=min(anp,an);
if((k)*y >=1000)
break;
}
for(int k=0;k<=1000;k++)
{
ll l1=1000-k*x;
ll l2=1000-k*y;
if(l1<0)
l1=0;
if(l2<0)
l2=0;
ll an=k;
ll op1=l1/z;
if(l1%z)
op1++;
ll op2=l2/z;
if(l2%z)
op2++;
an=an+op1+op2;
anp=min(anp,an);
//if(k==334)
// cout<<anp<<endl;
if((k)*x>=1000)
break;
}
for(int k=0;k<=1000;k++)
{
ll l1=1000-k*x;
ll l2=1000-k*z;
//if((k-1)*x>=1000)
// break;
if(l1<0)
l1=0;
if(l2<0)
l2=0;
ll an=k;
ll op1=l1/y;
if(l1%y)
op1++;
ll op2=l2/y;
if(l2%y)
op2++;
an=an+op1+op2;
anp=min(anp,an);
if((k)*x>=1000)
break;
}
cout<<anp<<endl;
}
return 0;
}