在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中L是桥的长度)。坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是s到t之间的任意正整数(包括s,t)。当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥。
题目给出独木桥的长度L,青蛙跳跃的距离范围s,t,桥上石子的位置。你的任务是确定青蛙要想过河,最少需要踩到的石子数。

Input

有多组测试数据。
对于每组测试数据,第一行四个正整数L, s, t, n(1 <= L <= 10^5, 1 <= s <= t <= 10,1 <= n <= 100),分别表示独木桥的长度,青蛙一次跳跃的最小距离,最大距离,及桥上石子的个数。第二行有n个不同的正整数分别表示这n个石子在数轴上的位置(数据保证桥的起点和终点处没有石子)。所有相邻的整数之间用一个空格隔开。

Output

每组测试数据仅输出一行,包括一个整数,表示青蛙过河最少需要踩到的石子数。

题解:

显然是一个动态规划的题目,但是和我想的不太一样,

原本思路是 :以到达石子 i 所在位置所需要踩到的石子数,建立一个2维的表格,开始递推打表就行,发现写不出来根本没法判定。

错因:子问题找错了,及动态规划最重要的 divide and conquer (DAC)出错;

参照了博客后发现自己的思路不太对,应该直接枚举青蛙可能到达的所有位置,状态转移方程式:dp[i]=min(dp[i], dp[i+j]),dp[i]是指从终点(不确定)到达i点的cost,找到这个思路后发现这个和数塔那个题目很相似,

数塔是从多个终点推到起点(不过有2个变量x,y坐标),这个也是从多个终点推到一个起点(只有一个变量x,但是题目给了一个范围导致x还要随跳跃的距离而变化,这样又变成了很相似数塔题目,那又是一道模板题,竟然之前不会写 Orz.....)

反思:

这种不是很复杂的dp问题,注意好自己的思路,以什么为状态进行转移,然后开始递推(类似打表);

 #include <iostream>
#include <cstring>
#define min(x,y) ((x)>(y)?(y):(x))
using namespace std; const int maxn=1e5+;
const int INF=0x3f3f3f3f; int main ()
{
int dp[maxn]={},vis[maxn]={};
int l,s,t,n;
while(cin>>l>>s>>t>>n)
{
memset(dp, , sizeof(dp));
memset(vis, , sizeof(vis));
for(int i=; i<n; i++)
{
int date; cin>>date;
vis[date]=;
} for(int i=l-1; i>=; i--)
{
dp[i]=INF;
for(int j=s; j<=t; j++)
dp[i]=min(dp[i],dp[i+j]);
dp[i]+=vis[i];
}
cout<<dp[]<<endl;
}
return ;
}

HRBUST 1186 青蛙过河 (思路错了)的更多相关文章

  1. 洛谷 P1244 青蛙过河

    P1244 青蛙过河 题目描述 有一条河,左边一个石墩(A区)上有编号为1,2,3,4,…,n的n只青蛙,河中有k个荷叶(C区),还有h个石墩(D区),右边有一个石墩(B区),如下图所示.n只青蛙要过 ...

  2. Java实现 LeetCode 403 青蛙过河

    403. 青蛙过河 一只青蛙想要过河. 假定河流被等分为 x 个单元格,并且在每一个单元格内都有可能放有一石子(也有可能没有). 青蛙可以跳上石头,但是不可以跳入水中. 给定石子的位置列表(用单元格序 ...

  3. [LeetCode] Frog Jump 青蛙过河

    A frog is crossing a river. The river is divided into x units and at each unit there may or may not ...

  4. NOIP 2005 青蛙过河

    做题记录:2016-08-10 21:58:09 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都 ...

  5. ooj 1066 青蛙过河DP

    http://121.249.217.157/JudgeOnline/problem.php?id=1066 1066: 青蛙过河 时间限制: 1 Sec  内存限制: 64 MB提交: 58  解决 ...

  6. 趣味算法——青蛙过河(JAVA)

    青蛙过河是一个非常有趣的智力游戏,其大意如下: 一条河之间有若干个石块间隔,有两队青蛙在过河,每队有3只青蛙,这些青蛙只能向前移动,不能向后移动,且一次只能有一只青蛙向前移动.在移动过程中,青蛙可以向 ...

  7. P1244 青蛙过河

    P1244 青蛙过河NOI2000主要思想:数学归纳法 递推 压位高精度 化归 理解能力和找规律的能力题意再述:1.青蛙从上到下必须连续递增或者下面是石墩 而不能是1 12 33 4而且每时每刻都要满 ...

  8. 洛谷P1244 青蛙过河

    P1244 青蛙过河 362通过 525提交 题目提供者该用户不存在 标签 难度普及- 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨论 题目什么意思 题目看不懂啊 题目描述 有一条河 ...

  9. 洛谷P1244 [NOI2000] 青蛙过河 [2017年4月计划 动态规划07]

    P1244 青蛙过河 题目描述 有一条河,左边一个石墩(A区)上有编号为1,2,3,4,…,n的n只青蛙,河中有k个荷叶(C区),还有h个石墩(D区),右边有一个石墩(B区),如下图所示.n只青蛙要过 ...

随机推荐

  1. vue里面的v-for列表循环

    列表渲染 v-for v-for可以把数据中的一个数组对应为一组元素v-for 指令需要以 item in items 形式的特殊语法, items 是源数据数组并且 item 是数组元素迭代的别名. ...

  2. 对text字段聚合,没有设置fielddate所以出错

    http://192.168.60.26:9200/linewell_assets_mgt_es_yh_test/lw_devices/ _mapping { "properties&quo ...

  3. 关于矩阵快速幂的用法总结QwQ

    umm首先矩阵快速幂的板子就不港了比较简单的还是?就结合二进制地理解一下就好了,代码可以翻蒟蒻の考前续命这里面放了我记得? 主要是说下应用趴? 目前我会的似乎就是个矩阵加速?简单来说就是个给一个递推式 ...

  4. python tkinter button

    """小白随笔,大佬勿喷""" '''Button按钮 点击执行对应的命令''' import tkinter as tk #初始化窗口 w ...

  5. 变量存储缓存机制 Number (int bool float complex)

    # ###变量存储的缓存机制(为了节省空间) #Number (int bool float complex) # (1) int -5~正无穷范围内 var1 = 18 var2 = 18 var1 ...

  6. python 容器类型数据 (str list tuple set dict)

    # ###容器类型数据(str list tuple set dict) var1 = "今天心情非常美丽" var2 = [1,2,3,4] var3 = ("黄将用& ...

  7. vue的install

    将$platform挂载到Vue.prototype下面,this里面的内容就是$platform里面的东西 Vue.prototype.$platform = this 在chrome开发者工具下的 ...

  8. Python Async/Await入门指南

    转自:https://zhuanlan.zhihu.com/p/27258289 本文将会讲述Python 3.5之后出现的async/await的使用方法,以及它们的一些使用目的,如果错误,欢迎指正 ...

  9. 【Java】NO.83.Tool.1.GlassFish.1.001-【GlassFish 5 安装使用】-

    1.0.0 Summary Tittle:[Java]NO.83.Tool.1.GlassFish.1.001-[GlassFish 5 安装使用]- Style:EBook Series:Java ...

  10. JMeter中的正则表达式的匹配

    ==