原题传送门

这道题要用到压缩的思想(原来DP还能这么用。。。)

其实很简单,假如我们要到某一个位置w

如果我们原位置为Q

很显然,如果(W-Q>=s*t)那么我们一定能到达W

换言之,就是如果我们我们可以到达s*t+1~s*t+t的任意位置

然后我们就可以取膜啦

每次最多只能前进100格,100次后只能前进10000格

那么就可以DP啦,是不是很神奇?

但是我们要考虑一种特殊情况,如果s=t,那么上述方法是没有任何效果的。

所以我们只能到达s倍数的点

所以要特殊处理咯

下面贴代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#define min(a,b) (a)<(b)?(a):(b)
using namespace std;
int num[];
bool stone[];
int dp[];
int ans=,l,s,t,m;
int main(){
scanf("%d%d%d%d",&l,&s,&t,&m);
for(int i=;i<=m;i++)scanf("%d",&num[i]);
num[]=;num[m+]=l;
sort(num+,num+m+);
if(s==t)
{
int tot=;
for(int i=;i<=m;i++)
if(!(num[i]%s))tot++;
printf("%d\n",tot);
}
else{
int k=s*t,move=;
for(int i=;i<=m+;i++)
{
int x=num[i]-move-num[i-];
if(x>k)move+=x-k;
num[i]-=move;
stone[num[i]]=true;
}
stone[num[m+]]=false;
memset(dp,,sizeof(dp));
dp[]=;
for(int i=;i<=num[m+]+t-;i++)
{
for(int j=s;j<=t;j++)
if(i>=j)dp[i]=min(dp[i],dp[i-j]);
dp[i]+=stone[i];
}
for(int i=num[m+];i<=num[m+]+t-;i++)
ans=min(ans,dp[i]);
printf("%d\n",ans);
}
}

过河(DP)的更多相关文章

  1. 袋鼠过河---DP

    题目:一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳的更远,每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为5, ...

  2. NOIP2005过河[DP 状态压缩]

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

  3. ooj 1066 青蛙过河DP

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

  4. [HDU 4842]--过河(dp+状态压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4842 过河 Time Limit: 3000/1000 MS (Java/Others)    Mem ...

  5. tyvj 1059 过河 dp

    P1059 过河 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2005 提高组 第二道 描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳 ...

  6. P1052 过河[DP]

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

  7. [noip2005提高]过河 dp

    由于L的范围到了109,用普通dp做肯定是不成了: 可以观察到M的数量很小,dp在转移的过程中有大量的无用转移: 可以想到压缩范围,问题是如何压缩,观察若S=9,T=10时,能到达的点,9,10,18 ...

  8. 过河(DP)

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

  9. 洛谷P1244 青蛙过河 DP/思路

    又是一道奇奇怪怪的DP(其实是思路题). 原文戳>>https://www.luogu.org/problem/show?pid=1244<< 这题的意思给的挺模糊,需要一定的 ...

  10. Luogu P1052 过河 DP

    复习复习DP...都忘了QAQ... 好了这道题我其实是看题解才会的... 方程 f[i]=min(f[i-j]+v[i]) v[i]表示i是不是石头 s<=j<=t 路径压缩引用一下证明 ...

随机推荐

  1. protues7.5安装

    win8 + protues7.5的安装  首先找到解压的文件夹,然后按照一步一步安装,如果中间出现不一样的,请退到前一步重新安装, 注意,安装的目录不要出现中文路径.

  2. ansible-1

    ansible与salt对比: 相同: 都是为了同时在多台机器上执行相同的命令 都是python开发 不同: agent(saltstack需要安装.ansible不需要) 配置(salt配置麻烦,a ...

  3. Android获取状态栏的高度:

    方法一: //获取手机状态栏高度 public static int getStatusBarHeight(Context context){ Class<?> c = null; Obj ...

  4. CSS3 loading效果全

    梦想天空 关注前端开发技术 ◆ 推动 HTML5 & CSS3 技术发展 ◆ 本博客全新站点:yyyweb.com 欢迎围观:) 首页 管理 订阅 网页设计 JavaScript jQuery ...

  5. (1)strchr

    const char * strchr ( const char * str, int character ); char * strchr ( char * str, int character ) ...

  6. express 热启动 静态文件部署 跨域解决 调试

    1.热启动 每次修改app.js文件,都得重新启动项目,十分不方便.这里可以用hotnode插件实现热启动 安装:$ npm install -g hotnode 启动项目:$ hotnode app ...

  7. Python 推导式推导序列

    推导式是从一个或多个迭代器快速创建序列的方法.它可以将循环和条件判断结合,从而避免冗长的代码. 一.列表推导式 语法: [表达式 for item in 可迭代对象] [表达式 for item in ...

  8. linux ubuntu开启sshd

    which ssh #查看文件 sudo apt-get install ssh #安装ssh cd /etc/init.d #切换目录 ls -l | grep ssh #执行启动脚本 sudo s ...

  9. 关于MySQL查询优化 の 30条忠告

    撸自:http://www.jincon.com/archives/120/ 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避 ...

  10. OpenCV实现张正友相机标定源代码

    本源代码基于VC++和opencv Opencv2.4.13.6版本开发,实现张正友相机标定源代码,资源包括完整源代码和12张棋盘图片,完美运行.Opencv2.4.13.6安装包下载地址:http: ...