过河 [HNOI2008,Codevs1105]
来源:互联网 发布:ubuntu输入密码后卡住 编辑:程序博客网 时间:2024/06/10 00:58
题目地址请点击——
过河
Description
在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。
在桥上有一些石子,青蛙很讨厌踩在这些石子上。
由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:
坐标为
青蛙从桥的起点开始,不停的向终点方向跳跃。
一次跳跃的距离是
当青蛙跳到或跳过坐标为
题目给出独木桥的长度
你的任务是确定青蛙要想过河,最少需要踩到的石子数。
Input
输入第一行有一个正整数
第二行有三个正整数
第三行有
所有相邻的整数之间用一个空格隔开。
Output
输出只包括一个整数,表示青蛙过河最少需要踩到的石子数。
Sample Input
10
2 3 5
2 3 5 6 7
Sample Output
2
Data Size & Hint
对于
对于全部的数据,
Solution
若
题设中
于是我们可以分两种情况讨论:
这时候由于每一步只能按固定步长跳,所以若第i个位置上有石子并且i mod S=0那么这个石子就一定要被踩到。这是我们只需要统计石子的位置中哪些是S的倍数即可。复杂度O(M)
首先我们作如下处理:若存在某两个相邻石子之间的空白区域长度>
所以原来的最优解必然在处理之后的最优解解集中。
经过这样的压缩处理,独木桥的长度
压缩之后再用先前的动态规划求解,复杂度就简化成了
这样本题就得到了解决。
Code
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define MAXN 100#define Min(x,y) ((x)<(y)?(x):(y))using namespace std;int l,s,t,m,tot,size;int Minx;int nxt[10000010][3],dis[110];int f[20000010],cnt=1;int main(){ freopen("river.in","r",stdin); Minx=0x3f3f3f3f; memset(f,0x3f,sizeof f); scanf("%d%d%d%d",&l,&s,&t,&m); for(int i=1;i<=m;i++)scanf("%d",&dis[i]); sort(dis+1,dis+m+1); f[0]=0; if(s==t){ for(int i=1;i<=m;i++) if(dis[i]%s==0)tot++; printf("%d\n",tot); } else{ dis[m+1]=l; for(int i=2;i<=m+1;i++) if(dis[i]-dis[i-1]+1>MAXN+2*t){ nxt[++nxt[0][0]][0]=dis[i-1]; nxt[nxt[0][0]][1]=dis[i]-MAXN-2*t; } tot=size=1;cnt=0; int ss,start=1; f[0]=0; if(dis[1]>MAXN+2*t){start=dis[1]-MAXN-2*t-1;f[0]=0;} for(int i=start;i<=l+t-1;(i==nxt[size][0])?(i=nxt[size][1],size++):(i++)){ ++cnt; if(i==l)ss=cnt; if(dis[tot]==i&&tot<=m){ for(int j=s;j<=Min(cnt,t);j++) f[cnt]=Min(f[cnt],f[cnt-j]+1); tot++; } else for(int j=s;j<=Min(cnt,t);j++) f[cnt]=Min(f[cnt],f[cnt-j]); } for(int i=ss;i<=cnt;i++) Minx=Min(Minx,f[i]); printf("%d\n",Minx); } return 0;}
- 过河 [HNOI2008,Codevs1105]
- codevs1105 过河
- 【基础练习】【线性DP+离散化】codevs1105 过河题解
- 【hnoi2008】
- 过河
- 过河
- 过河
- 过河
- 过河
- 过河
- 过河
- 过河
- 过河
- 过河
- 过河
- 过河
- 【HNOI2008】越狱
- [HNOI2008]越狱
- HierarchyViewer中的viewNode获取与解析方式
- 一个Struts2小案例的一般执行流程
- JFinal的ActiveRecord插件常用方法
- 查找--插值查找
- IOS推送 遇到的小Bug
- 过河 [HNOI2008,Codevs1105]
- 【最短系列】霍夫变换-PAC-Hoeffding's inequality
- nginx前端,tomcat后端服务器获取客户的真实IP,包括tomcat访问日志获取真实IP的配置
- leetcode 204 Count Primes
- jquery mobile开发手机webapp页面(三)拖动排序插件Sortable
- Linux——bug记录
- esxi error 1962
- 2016-6-23 html、extjs总结--在panel中加控件
- python使用基础