pku 1925 Spiderman DP
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型,你也可以直接用三角函数求解这样就不用考虑超数据类型的了。
![](/assets/blank.gif)
![](/assets/blank.gif)
#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相关推荐
- poj 1925 Spiderman (dp)(疯狂TLE)
题目链接:http://poj.org/problem?id=1925 题意:给出N个点,每个点都有两个数x.y,其中x表示点的横坐标,y表示纵坐标(建筑物的高度):给出的每个点都满足y值是大于等于起 ...
- POJ前面的题目算法思路【转】
1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...
- POJ 超详细分类
POJ 各题算法 1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 ...
- 9月——都已经9月了还不好好刷题?。。
1 UVALive4513 (字符串hash 题目:在一个串中找到至少出现m次的最长的串. 思路:直接hash,然后二分答案. /* * @author: Cwind * http://www.cnb ...
- 【记忆化搜索】【线性化DP】滑雪 (ssl 1202/luogu 1434/pku 1088)
滑雪滑雪滑雪 ssl 1202 luogu 1434 pku 1088 题目大意: 有一个N*M的矩阵,每个位置都有一个数,可以从大的数走向小的数,问可走的路最长是多少 原题 Michael喜欢滑雪百 ...
- poj 1925(坐标上的dp)
题目大意: 给出n个建筑,每个建筑以两个数x,y表示,x代表它在横轴上的位置,y代表这个建筑的高度.所有建筑的高度都大于等于第一个建筑的高度.所有建筑输入顺序按照x,y从小到达的顺序排列. 蜘蛛侠在第 ...
- pku 1191 棋盘分割 DP / 记忆化搜索
http://poj.org/problem?id=1191 题意:中文省略. 思路:黑说p116有讲解, 主要的状态转移方程为 横着切: dp[k][x1][y1][x2][y2] = min(d ...
- pku 1463 Strategic game 树形DP
http://poj.org/problem?id=1463 对于树形DP不大来感啊,才开始做的时候考虑成覆盖全部点了,致使我拓扑做了,WA了好几次.感觉是树形DP好像以前做过类似的题目可是就是想不出 ...
- BZOJ 1925 地精部落 DP
Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...
最新文章
- 没有云平台,又不会代码?MicrobiomeAnalyst:一款综合的可视化微生物组学数据分析网页工具
- [YTU]_2917(Shape系列-3)
- 上海 |《PMCAFF 产品经理第一课》全面提升,微博副总裁、丁香园、1号店、淘宝、阿里巴巴产品总监最强分享...
- Android 的用户层 uevent处理机制
- Hibernate进阶之如何使用Hql内连接,外连接以及自连接
- CVPR 9999 Best Paper——《一种加辣椒的番茄炒蛋》
- Chrome查看cookie
- 《Essential C++》笔记之设定头文件
- python设计选择题代码源_Python程序的设计试题库完整
- c语言 最大子段和,最大子段和 C语言源码
- comsol学习中心:建模工作流程
- google地图通过经纬度查询位置
- 华为手机左侧快捷方式_让华为手机使用更轻松,这些快捷键与手势该知道!
- 隐含马尔可夫 隐含状态_隐含可读性
- 《此生未完成》:她说,名利权情,没有一样是不辛苦的
- 阿里云服务器操作系统有哪些?如何选择?
- 5G是什么? --5G
- mysql火焰图_Linux 性能分析利器 -火焰图 flame graph
- 使用pytorch获取bert词向量 将字符转换成词向量
- GPS 入门 1 —— 基础知识[转]