#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int N= 5010;
const int M=1000010;
int x[N],y[N],dp[M],nb;
int main()
{
#ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif
int ntc,n,i,j,k,m;
cin>>ntc;
while(ntc--)
{
cin>>n;
for(i=0;i scanf("%d%d",x+i,y+i);
memset(dp,-1,(x[n-1]+1)*sizeof(dp[0]));
m=x[n-1];
dp[x[0]]=0;
double h=y[0]; //每次交接点的高度相同,都是y[0],呵呵,你看到了吗
for(i=1;i int d = sqrt(2*y[i]*h - h*h); //不会坠落到地上的最长距离 sqrt(y[i]*y[i]-sqare(y[i]-h))
for(j=1;j<=d;j++){ //枚举交接点
if(x[i]- j < x[0]) break; //无用状态 //ok
if(dp[x[i]-j]==-1) continue;//不可达状态 //ok
k=x[i]+j if(dp[k]==-1) dp[k]=dp[x[i]-j]+1; //第一次到达偏移k处
else dp[k]=min(dp[k],dp[x[i]-j]+1);
} //for
}//for
cout< } //while
return 0;
}
阅读(1074) | 评论(0) | 转发(0) |