P1052 [NOIP2005 提高组] 过河

该博客介绍了如何使用动态规划解决一个关于过河的问题。在问题中,每次移动的位置是确定的,根据到达的点判断是否为石头以更新总数。关键在于处理大范围的数据,通过离散化将超过s×t的距离缩成s×t,从而简化计算。
摘要由CSDN通过智能技术生成

在这里插入图片描述
这个dp挺好想的,每次走的位置是知道的,所以走到那个点,就能知道从那个点过来的。
然后再分到的这个点是不是石头,如果是石头就总数加一,否则就不变。

难得地方是范围的问题。l最大能到一亿,这样的话,就要缩短距离,缩短的话,就离散化。
我们只需将每两个石头超过 s×t 的距离缩成s×t就可以了。
算是了解了离散化的概念

#include<bits/stdc++.h>

using namespace std;
const int maxn = 150;
const int maxl = 300 * 105;
//其实开90 * 105就可以了;
int L,s,t,m,ss[maxn],a[maxn],dp[maxl],base;
//stone就是石头的初始位置;a为我们将石头初始化后的石头位置;
bool v[maxl];
//标记一下坐标上的该点是否为石头;
int main()
{
   
    int
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值