显然是\(dp\),是用\(STL\)当中的\(map\)可以做到30分

#include <bits/stdc++.h>//万能头文件
using namespace std;
int l,n,s,t;
map<int,bool>m;//记有没有石头
map<int,int>dp;//最少踩到石头的个数
int main(){
cin>>l>>s>>t>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
m[x]=true;
}
for(int i=1;i<=l+t-1;i++){
dp[i]=INT_MAX/2;
for(int j=s;j<=t&&j<=i;j++)dp[i]=min(dp[i],dp[i-j]);//倒退
if(m[i])dp[i]++;
}int s=dp[l];
for(int i=l+1;i<=l+t-1;i++)s=min(s,dp[i]);
cout<<s;
return 0;
}

之后,我们该想一想如何\(AC\)这道题

我们发现石头数量很少,而独木桥却很长

遇到这张图,我们可能还会选择暴力的方法

但是遇到这张图,你还会用暴力吗?

空的地方就是随便走就行了,完全可以不用老老实实的去看,我们可以把路径压缩,更简单地说就是如果后面的一个石头与前面的一个石头距离太远,我们可以把后面一个石头推到前一个石头附近,至于这个量是多少呢,需要自己把握。

我自己还是觉得稍微保险一点,不要\(TLE\)就行了,所以我选择把这个数定在\(1000\),当然听同学说,他定的比较小也过了,这并没有关系。

所以,我们可以看代码了

#include<bits/stdc++.h>
using namespace std;
int l,s,t,m,a[110],dp[100010],b[110];
bool x[100010];
int main(){
cin>>l;
cin>>s>>t>>m;
for(int i=1;i<=m;i++)cin>>a[i];
sort(a+1,a+1+m);
if(s==t){//这个应该很简单,我上面没有说
int ans=0;
for(int i=1;i<=m;i++)
if(a[i]%s==0)ans++;//如果会经过它,答案+1
cout<<ans;//输出
return 0;
}
for(int i=1;i<=m;i++)
if(a[i]-a[i-1]>1000)b[i]=b[i-1]+1000;//注意啦,如果原来的距离小于1000,你要保持不变
else b[i]=a[i]-a[i-1]+b[i-1];
for(int i=1;i<=m;i++)x[b[i]]=true;//石头
l=b[m];
for(int i=1;i<=l+t-1;i++){
dp[i]=INT_MAX/2;
for(int j=s;j<=t&&j<=i;j++)dp[i]=min(dp[i],dp[i-j]);//转移状态
if(x[i])dp[i]++;
}int ans=dp[l];
for(int i=l;i<=l+t-1;i++)ans=min(ans,dp[i]);//打擂法求最小值
cout<<ans;//输出
return 0;
}

题解 P1052 【过河】的更多相关文章

  1. 【洛谷】P1052 过河【DP+路径压缩】

    P1052 过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙 ...

  2. 洛谷P1052 过河

    P1052 过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上. 由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青 ...

  3. P1052 过河(离散化+dp)

    P1052 过河 dp不难,重点是要想到离散化. 石子个数$<=100$意味着有大量空间空置,我们可以缩掉这些空间. 实现的话自己yy下就差不多了. #include<iostream&g ...

  4. P1052 过河(状态压缩)

    P1052 过河(状态压缩) 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把 ...

  5. 洛谷p1052过河 路径压缩+dp

    洛谷 P1052 过河 思路部分可以看这篇博客 我将在这里对其进行一些解释与补充 首先我们先看题 乍一看 这不是模板题吗 然后开开心心的敲了一个简单dp上去 #include<iostream& ...

  6. P1052 过河 题解

    复习dp(迪皮)的时候刷到了一道简单路径压缩的题目(一点不会qwq) 题目描述链接. 正解: 首先呢,我们看到题目,自然而然的会想到这种思路: 设状态变量dp[i]表示从第一个格子开始经过一些跳跃跳到 ...

  7. 洛谷 P1052 过河

    题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...

  8. P1052 过河 线性dp 路径压缩

    题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...

  9. P1052 过河 线性dp

    题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...

随机推荐

  1. 【Java】macOS下编译JDK8

    安装mercurial brew install mercurial 下载源码 1234 hg clone http://hg.openjdk.java.net/jdk8/jdk8 java-sour ...

  2. Jenkins+Git+Fastlane+Fir CI集成

    上一篇有讲关于fastlane自动化部署,本篇将会着重讲关于fastlane的实际应用. 目标: 利用自动化jenkins打包工具,自动拉取git仓库代码 不需要通过手动检查修改xcode中项目配置修 ...

  3. JS实现总价随数量变化而变化(顾客购买商品表单)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:test.html * 作者:常轩 * 微信公众号:Worldh ...

  4. list转map,set,使用stream进行转化

    #list转map,set,使用stream进行转化 函数式编程: 场景: 从数据库中取出来的数据,经常是list集合类型,但是list转map这种场景虽然不常见,但是有时候也会遇到,最常见的还是转为 ...

  5. JVM性能优化

    java应用程序是应用在JVM上的,你们对JVM又有多少了解呢?JVM将内存分为三部分:NEW(年轻代).Tenured(年老代).Perm(永久代). (1)年轻代:用来存放java分配的新对象. ...

  6. CKEditor4.7怎样实现上传图片,浏览服务器(无需ckfinder),nodejs图片管理,字体居中,图片居中(超详细)

    首先是下载CKEditor,下载地址:http://ckeditor.com/download 选择里面的Customize自定义,如图 然后进入配置界面,第一个choose preset一般就选st ...

  7. 从零认识 DOM (一): 对象及继承关系

    先上图为敬! 说明: 图中包括了大部分 DOM 接口及对象, 其中: 青色背景为接口, 蓝色背景为类, 灰色背景表示为 ECMAScript 中的对象 忽略了一部分对象, 包括: HTML/SVG 的 ...

  8. 【Amaple教程】2. 模块

    正如它的名字,模块用于amaplejs单页应用的页面分割,所有的跳转更新和代码编写都是以模块为单位的. 定义一个模块 一个模块由<module>标签对包含,内部分为template模板.J ...

  9. safari坑之 回弹

    博客地址: https://www.seyana.life/post/20 今天在使用safari浏览博客的时候, 发现在拉至顶部并产生回弹之后,头部导航隐藏了, 除非在上拉的时候,刚好达到顶部而不超 ...

  10. vue 不用npm下载安装包 该如何引用js

    公司电脑不让用npm  ,vue的项目要使用moment.js, 用了各种script 引用,总是报错 正确的方式应该为: import {moment} from ‘moment.js ’ 不可以全 ...