poj1925Spiderman(dp)
2024-10-16 14:12:32
确实是破题 按复杂度估计怎么着也不能按坐标D 啊
网上的代码交上去还TLE 无语了 多次TLE之后终于看到一次WA。。好高兴
以横坐标进行DP dp[j] = min(dp[j],dp[2*x[i]-j]+1) 这个2*x[i]-j其实是 j+2*(x[i]-j]) 由当前坐标可以由没跳这个个建筑物i之前的坐标推来
限制条件为 (j-x[i])*(j-x[i])+(y[i]-y[1])*(y[i]-y[1])>y[i]*y[i];
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstring>
#include<stdlib.h>
using namespace std;
#define N 5010
#define M 2000010
#define INF 0xfffffff
#define LL long long
int dp[M];
LL x[N],y[N];
int main()
{
int i,j,k,n;
scanf("%d",&k);
while(k--)
{
scanf("%d",&n);
for(i = ; i <= n ; i++)
scanf("%lld%lld",&x[i],&y[i]);
for(i = ; i <= M ; i++)
dp[i] = INF;
dp[x[]] = ;
int ans = INF;
for(i = ; i <= n ; i++)
{
LL s1 = (y[i]-y[])*(y[i]-y[]);
for(j = x[i] ; ; j++)
{
LL s2 = (j-x[i])*(j-x[i]);
if(s2+s1>y[i]*y[i])
{
break;
}
if(*x[i]-j>=x[])
dp[j] = min(dp[*x[i]-j]+,dp[j]);
else
break;
if(j>=x[n])
ans = min(ans,dp[j]);
}
}
if(ans==INF)
printf("-1\n");
else
printf("%d\n",ans);
}
return ;
}
最新文章
- EF-DbUpdateException--实体类和数据库列不对应的解决方案
- Xshell远程管理Linux
- 27-React Lists and Keys
- mysql字符串截取
- 最流行的编程语言JavaScript能做什么?
- iOS图片处理
- sql - 修改结构
- Net Core- 配置组件
- 巧用ajax请求服务器加载数据列表时提示loading
- 补习系列(14)-springboot redis 整合-数据读写
- es6中的模块化
- js把某个div或其他元素用图片的形式导出或下载
- mysql 地理位置定位
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-WebApi与Unity注入
- Delphi编程中动态菜单要点归纳
- webapi返回泛型给easyui
- centos服务器删除/usr目录怎么办
- Hadoop概念学习系列之Hadoop新手学习指导之入门需知(二十)
- Android 心跳动画
- 从零开始写一个武侠冒险游戏-0-开发框架Codea简介