【poj 1925】Spiderman 题意&题解&代码(C++)

该博客介绍了POJ 1925题目的详细解题思路,蜘蛛侠需要从第一个柱子荡到最后一个柱子,过程中遵循特定规则。题目要求找到最少的荡蛛丝次数。博主分析了问题的关键在于优化状态转移,通过减少无效枚举降低时间复杂度,并提供了优化后的C++代码实现。
摘要由CSDN通过智能技术生成

题目链接:

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

题意:

输入K组数据,每组数据输入n个柱子的信息,每个柱子信息为x坐标和高度h,蜘蛛侠需要从第一的柱子通过不断荡蛛丝荡到最后一个柱子,荡的规则:
1.蜘蛛侠不会撞到柱子上,假如他在高度为h的位置j通过柱子i前进,那么它会直接荡到同样高度为h位置为x[i]+x[i]-j的位置上,不会受中间柱子的阻挡(x[i]表示柱子i的x坐标)
2.蜘蛛侠在荡蛛丝的过程中一旦能荡到位置x,使得x>=x[n],则视为它荡到了最后一个柱子上(只适用于最后一个柱子)。
求最少的荡蛛丝的次数。

1 <= T <= 20,0 <= Xi, Yi <= 1000000,2 <= N <= 5000

题解:

注意它给出了初始的高度,每次荡完之后所处位置的高度与初始高度相同,因此高度仅仅用来判断能否荡蛛丝,对于状态转移并没有影响。

首先不考虑数据范围,我们很快可以想出一个N×X[n]的做法,类似于01背包,dp[j]表示到达位置j时所荡的最少次数,转移方程和01背包也没太大区别

        for (int i=1;i<=x[n];
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值