这个破题,好不容易思路清楚了,写的就是过不了。。关键部分直接抄的别人的。。。终于A了,自己写的判断什么的,就是有一组数据过不了。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define LL __int64
int dp[];
struct node
{
int x,y;
} p[];
#define eps 1e-6
int main()
{
int t,i,j,n,ans;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i = ; i < n; i ++)
{
scanf("%d%d",&p[i].x,&p[i].y);
}
for(i = ; i < ; i ++)
dp[i] = INF;
dp[p[].x] = ;
ans = INF;
for(i = ; i < n; i ++)
{
for(j = p[i].x;; j ++)
{
LL dx = j-p[i].x, dy = p[i].y-p[].y;
if( dx*dx+dy*dy > 1LL*p[i].y*p[i].y ) break;
if( *p[i].x-j >= p[].x )
dp[j] = min(dp[j], dp[*p[i].x-j]+);
else
break;
if( j >= p[n-].x && dp[j] < ans )
{
ans = dp[j];
}
}
}
if(ans >= INF)
printf("-1\n");
else
printf("%d\n",ans);
}
return ;
}