POJ 1925 Spiderman
2013-11-22 14:15
489 查看
题意:如下图所示,蜘蛛侠在某个位置,他女朋友在另一个建筑(WestTower)上,蜘蛛侠每次可以吐丝到附近的建筑顶端,然后摇摆到关于该建筑物对称的位置。只要荡到横坐标 >= X(WestTower)的位置,就能爬上WestTower。问在不碰到地的情况下,最少要吐多少次丝。
View Code
/* * Author: Plumrain * Created Time: 2013-11-18 19:22 * File Name: DP-POJ-1925.cpp */ #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define CLR(x) memset(x, 0, sizeof(x)) const int maxint = 2147483647 - 10; typedef long long int64; int n; int x[5005], y[5005], d[1010005]; int64 a[5005]; void init() { scanf ("%d", &n); for (int i = 0; i < n; ++ i){ scanf ("%d%d", &x[i], &y[i]); a[i] = (int64)y[i]*y[i] - (int64)(y[i]-y[0]) * (y[i]-y[0]); } } int DP() { for (int i = 0; i <= x[n-1]+10000; ++ i) d[i] = maxint; d[x[0]] = 0; for (int i = 1; i < n; ++ i){ for (int j = x[i]-1; j >= x[0]; -- j){ if ((int64)(x[i]-j)*(x[i]-j) > a[i]) break; int tmp = 2*x[i] - j; if (tmp >= x[n-1]) tmp = x[n-1]; d[tmp] = min(d[tmp], d[j] + 1); } } return d[x[n-1]] == maxint ? -1 : d[x[n-1]]; } int main() { int T; scanf ("%d", &T); while (T--){ init(); printf ("%d\n", DP()); } return 0; }
View Code
相关文章推荐
- poj1925-Spiderman(dp)
- poj 1925 Spiderman
- poj 1925 spiderman
- POJ 1925 Spiderman 笔记
- POJ 1925 Spiderman(DP)
- poj 1925 Spiderman (dp)
- poj 1925_Spiderman(坐标DP)
- POJ 1925 Spiderman
- poj1925--Spiderman(dp)
- POJ 1925 Spiderman (DP)
- poj-1925 Spiderman
- [poj 1925] Spiderman 简单dp
- 位置判断poj 1925 spiderman
- POJ-1925 Spiderman 动态规划
- 【poj 1925】Spiderman 题意&题解&代码(C++)
- POJ 1925 Spiderman
- 【POJ 1925】 Spiderman(dp)
- POJ 1925 Spiderman
- poj 1925 Spiderman
- POJ 1925 Spiderman(DP)