【洛谷P1052】过河

这是一篇关于利用状态压缩动态规划(DP)解决洛谷P1052题目的博客。由于原问题中数轴长度过大导致时空限制,通过路径压缩将问题简化。博客介绍了如何计算石子最少数量的状态转移方程,并讨论了排序、距离压缩以及注意的细节,如石子位置未排序和循环范围的确定。
摘要由CSDN通过智能技术生成

很经典的一道题,也是很著名的一道状态压缩DP,十一的时候lch讲过但是没听懂= =,当时太弱(其实现在也很弱),然后也是因为这道题来学习了一下状态压缩dp,其实也没学多少,因为状态压缩说实话范围挺广的,可以hash可以离散化,可以bulabula..
然后这道题的思路理解之后其实也是蛮简单的,就是因为L太大,1e9时空都会超,又因为n<100,是一个稀疏图,所以呢,可以对他进行路径压缩,我们可以认为中间的点都是大跳过去的,所以对于长了很多的路程就去取模啊,模一模差不多就出来了。
我们用 f[i]表示在数轴的 i 点时所能踩石子的最少个数
那么很容易得出状态转移方程:
if(i点有石子) f[i]=min(f[i],f[i-j]+1)
else f[i]=min(f[i],f[i-j])
然而数轴长到fai起,那么我们就压缩一下
先把石子位置(用数组a来存放)从小到大排序,计算两两石子间的距离(用数组d来存放),如果距离<=t,那么a[i]=a[i-1]+d[i]
如果距离大于t,那么就需要压缩距离了,即 a[i]=a[i-1]+t+(d[i]%t)
然后还有要注意的两点
1.它的石子没说是已经排好序的,我看了样例以为都是排好序的,RE了一遍。
2.注意取p的范围,就是要在压缩的路程后面加一个t,因为不一定最后一个点刚好是石头最少的,可能是p+1,p+2,所以要从它转移过来,

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值