题目描述

在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,…,L0,1,…,L(其中LL是桥的长度)。坐标为00的点表示桥的起点,坐标为LL的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是SS到TT之间的任意正整数(包括S,TS,T)。当青蛙跳到或跳过坐标为LL的点时,就算青蛙已经跳出了独木桥。

题目给出独木桥的长度LL,青蛙跳跃的距离范围S,TS,T,桥上石子的位置。你的任务是确定青蛙要想过河,最少需要踩到的石子数。

解析

正常来讲,这是一道再简单不过的dp,状态定义就是到达每个点最少踩到的石子数,转移就是从前\(s\sim t\)步的状态转移过来。

但是,这题数据范围很大,于是运用压缩路径技巧。

显然,如果我们取\(1\sim10\)的最小公倍数,若两点之间距离为这个最小公倍数,那么无论\(s,t\)为何,都可以从上一个点跳到这一个点。因此,我们每遇到两个距离大于该最小公倍数的点,就将这个距离对该最小公倍数取模。

参考代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstdlib>
#include<queue>
#include<vector>
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define N 350000
#define E 1e-12
#define lcm 2520
using namespace std;
int dp[N],a[N],d[N],l,s,t,m;
bool v[N];
int main()
{
scanf("%d%d%d%d",&l,&s,&t,&m);
for(int i=1;i<=m;++i) scanf("%d",&a[i]);
sort(a+1,a+m+1);
for(int i=1;i<=m;++i) d[i]=(a[i]-a[i-1])%lcm;
for(int i=1;i<=m;++i){
a[i]=a[i-1]+d[i];
v[a[i]]=1;
}
l=a[m];
fill(dp+1,dp+N,m);
for(int i=0;i<=l+t;++i)
for(int j=s;j<=t;++j){
if(i-j>=0) dp[i]=min(dp[i],dp[i-j]);
dp[i]+=v[i];
}
int ans=INF;
for(int i=l;i<=l+t;++i)
ans=min(ans,dp[i]);
cout<<ans<<endl;
return 0;
}

最新文章

  1. 网络流 HDU 3605
  2. VS2012 生成事件
  3. iperf测试
  4. 大饱眼福 7款类型各异的CSS3实用菜单
  5. 破解之寻找OEP[手动脱壳](1)
  6. HDU 1074 Doing Homework(状态压缩DP)
  7. bzoj3191
  8. android 实现自己定义状态栏通知(Status Notification)
  9. 使用Ajax
  10. 同是办公软件,wps和office有什么区别?
  11. Linux 自动化部署DNS服务器
  12. 关于d3.js 将一个element 拖拽到另一个element的响应事件
  13. utc时间转成local时间
  14. 多进程和mongo的配合使用
  15. 如何判断页面是pc端还是移动端,进入不同的页面
  16. right spindle supply short to gnd
  17. java byte[]与十六进制字符串相互转换
  18. python学习之老男孩python全栈第九期_day004知识点总结
  19. python强大的数据类型转换
  20. NFS挂载时出现&quot;access denied by server while mounting&quot;的解决方法

热门文章

  1. Python:self理解
  2. win10查看激活到期时间
  3. 【VS开发】VS2015没修改源文件也导致重新编译的解决办法
  4. VS2013+OpenCV3.4.2编译
  5. openstack 权限控制 (添加自定义角色)keystone等组件
  6. HTTP协议:从原理到流程|乐字节
  7. Clean code 关于注释、函数、命名的感想
  8. javascript——常用事件总结
  9. 【LEETCODE】55、数组分类,适中级别,题目:79、611、950
  10. 【题解】Luogu P5398 [Ynoi2018]GOSICK