http://poj.org/problem?id=1925

题意:

蜘蛛侠的女朋友被坏人抓到了 tower (目标点),他必须尽快从 apartment(起点)到tower去救人,给出n个建筑物的坐标以及高度(第一个为起点最后一个为目标点),求蜘蛛侠用蜘蛛网最少荡几次才能到达tower?注意:这里在起点之后的建筑物保证高度都会大于等于起点的高度。

思路:

首先计算每个点i的来源点j的取值范围,然后枚举这个范围,递归的求解。假设来源点为j 则有x[i] - sqrt(h[i]*h[i] - (h[i] - H)*(h[i] - H)) <= j < x[i]; 其中x[i]为i建筑物的坐标,h[i]为i建筑物高度,H为h[0],注意这里在蜘蛛侠的每个停留点他的高度必为h[0](对称性)枚举来源点后计算有j可能到达的点pos = 2*(x[i] - j) + j = 2*x[i] - j;即可:

PS:注意再用sqrt()求解释h[i]*h[i]会超数据类型,所以我使用了double型,你也可以直接用三角函数求解这样就不用考虑超数据类型的了。

View Code

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <cmath>
#define CL(a,num) memset(a,num,sizeof(a))
#define maxn 5007
#define N 1000004
using namespace std;const int inf = 1999999;int dp[N];
int x[maxn];
double h[maxn];
int n;int main()
{//freopen("din.txt","r",stdin);int i,j,t;scanf("%d",&t);while (t--){scanf("%d",&n);for (i = 0; i < n; ++i)scanf("%d%lf",&x[i],&h[i]);CL(dp,-1);dp[x[0]] = 0;double H = h[0];int ans = inf;for (i = 1; i < n; ++i)//枚举每个建筑物
        {double tmp = sqrt((h[i]*h[i]*1.0 - 1.0*(h[i] - H)*(h[i] - H))*1.0);int l = x[i] - (int)tmp;//计算可能的来源点for (j = max(x[0],l); j < x[i]; ++j)//枚举来源点
            {if (dp[j] != -1){if (2*x[i] - j >= x[n -1])//2*x[i] - j就是可能到达的点
                    {ans = min(ans,dp[j] + 1);}else if (dp[2*x[i] - j] == -1 || dp[2*x[i] - j] > dp[j] + 1)dp[2*x[i] - j] = dp[j] + 1;}}}if (ans != inf) printf("%d\n",ans);else printf("-1\n");}return 0;
}

转载于:https://www.cnblogs.com/E-star/archive/2012/08/13/2636351.html

pku 1925 Spiderman DP相关推荐

  1. poj 1925 Spiderman (dp)(疯狂TLE)

    题目链接:http://poj.org/problem?id=1925 题意:给出N个点,每个点都有两个数x.y,其中x表示点的横坐标,y表示纵坐标(建筑物的高度):给出的每个点都满足y值是大于等于起 ...

  2. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  3. POJ 超详细分类

    POJ 各题算法 1000    A+B Problem            送分题     49%    2005-5-7 1001    Exponentiation         高精度   ...

  4. 9月——都已经9月了还不好好刷题?。。

    1 UVALive4513 (字符串hash 题目:在一个串中找到至少出现m次的最长的串. 思路:直接hash,然后二分答案. /* * @author: Cwind * http://www.cnb ...

  5. 【记忆化搜索】【线性化DP】滑雪 (ssl 1202/luogu 1434/pku 1088)

    滑雪滑雪滑雪 ssl 1202 luogu 1434 pku 1088 题目大意: 有一个N*M的矩阵,每个位置都有一个数,可以从大的数走向小的数,问可走的路最长是多少 原题 Michael喜欢滑雪百 ...

  6. poj 1925(坐标上的dp)

    题目大意: 给出n个建筑,每个建筑以两个数x,y表示,x代表它在横轴上的位置,y代表这个建筑的高度.所有建筑的高度都大于等于第一个建筑的高度.所有建筑输入顺序按照x,y从小到达的顺序排列. 蜘蛛侠在第 ...

  7. pku 1191 棋盘分割 DP / 记忆化搜索

    http://poj.org/problem?id=1191 题意:中文省略. 思路:黑说p116有讲解, 主要的状态转移方程为 横着切: dp[k][x1][y1][x2][y2]  = min(d ...

  8. pku 1463 Strategic game 树形DP

    http://poj.org/problem?id=1463 对于树形DP不大来感啊,才开始做的时候考虑成覆盖全部点了,致使我拓扑做了,WA了好几次.感觉是树形DP好像以前做过类似的题目可是就是想不出 ...

  9. BZOJ 1925 地精部落 DP

    Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...

最新文章

  1. 没有云平台,又不会代码?MicrobiomeAnalyst:一款综合的可视化微生物组学数据分析网页工具
  2. [YTU]_2917(Shape系列-3)
  3. 上海 |《PMCAFF 产品经理第一课》全面提升,微博副总裁、丁香园、1号店、淘宝、阿里巴巴产品总监最强分享...
  4. Android 的用户层 uevent处理机制
  5. Hibernate进阶之如何使用Hql内连接,外连接以及自连接
  6. CVPR 9999 Best Paper——《一种加辣椒的番茄炒蛋》
  7. Chrome查看cookie
  8. 《Essential C++》笔记之设定头文件
  9. python设计选择题代码源_Python程序的设计试题库完整
  10. c语言 最大子段和,最大子段和 C语言源码
  11. comsol学习中心:建模工作流程
  12. google地图通过经纬度查询位置
  13. 华为手机左侧快捷方式_让华为手机使用更轻松,这些快捷键与手势该知道!
  14. 隐含马尔可夫 隐含状态_隐含可读性
  15. 《此生未完成》:她说,名利权情,没有一样是不辛苦的
  16. 阿里云服务器操作系统有哪些?如何选择?
  17. 5G是什么? --5G
  18. mysql火焰图_Linux 性能分析利器 -火焰图 flame graph
  19. 使用pytorch获取bert词向量 将字符转换成词向量
  20. GPS 入门 1 —— 基础知识[转]

热门文章

  1. python 之 从list中随机抽取元素
  2. Ubantu16.04安装显卡驱动遇到的坑
  3. linux命令chmod如果当前用户属于多个组,那这个命令中的g指的是哪个组?按什么规则?
  4. C++学习笔记:类的成员函数的声明与定义
  5. C++类的静态成员详解
  6. 多线程服务器模型-one loop per thread
  7. 非二进制字符串数据:CHAR,VARCHAR,TEXT
  8. linux nginx 代理iis,nginx 系列 linux下安装以及配置IIS分发
  9. Hibernate 批量插入、更新与删除
  10. linux 查看cpu和磁盘使用情况