复习dp(迪皮)的时候刷到了一道简单路径压缩的题目(一点不会qwq)

题目描述链接

正解:

首先呢,我们看到题目,自然而然的会想到这种思路:

设状态变量dp[i]表示从第一个格子开始经过一些跳跃跳到第i个格子上所踩到的最小石子数目。

那么,根据每一次跳s~t个格子,我们可以得出dp[i]可以从dp[i-t]到dp[i-s]转移过来,要综合考虑的话呢,就要在所有之前的情况中取一个石子数最小的在加上当前位置是否有石子数,就是dp[i]的值。

于是呢,有了整体思路,我们开始敲起了代码。

浏览数组范围时发现了这样一个东西:

awsl

这空间时间都会炸吧。。。

于是乎,我们上述的简单套路就被ban掉了。

开始思考:

我们发现在这种数据下,石子间的间隔变得非常的大。

能不能压缩一下那些多余的路径,但是却对答案没有影响呢?

首先,摘取洛谷题解中一位dalao的做法:

我直接没看,被ex到了。

自己思考:

看了看数据范围:

观察dp式子dp[i]=max(dp[i-t]~dp[i-s])+flag[i];flag[i]表示第i个位置有没有石子。

当一段区间不存在石子时,flag就无用了。

于是说白了,就是个统计最大值的过程一旦统计完dp[i]到dp[i-t]的最大值,其后面flag等于0的情况直接就可以跳过了。

不难想出,统计dp[i]到dp[i-t]这个区间的最大值一共需要lcm(s,t)次。

感性理解。。。

于是我们得出了最短压缩长度90.。?(90=9*10,10,10的情况直接特判就行了)

那么,把多余90的距离都压缩成90一定能保证结果不变。

上代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 214748364
using namespace std;
int read()
{
int ans=;
char ch=getchar(),last=' ';
while(ch>''||ch<'')last=ch,ch=getchar();
while(ch>=''&&ch<='')ans=(ans<<)+(ans<<)+ch-'',ch=getchar();
return last=='-'?-ans:ans;
}
int min(int a,int b){return a<b?a:b;} inline bool cmp(int a,int b)
{return a<b;} int l,s,t,m,sz[],ans,dis[],sum,flag[],dp[]; int main(){
l=read();
s=read(),t=read(),m=read();
if(s==t)
{
int bol;
for(int i=;i<=m;i++)
{
bol=read();ans+=((bol%s)==);
}
printf("%d\n",ans);return ;
}
for(int i=;i<=m;i++)
sz[i]=read();
sort(sz+,sz++m,cmp);
for(int i=;i<=m;i++)
dis[i]=min(sz[i]-sz[i-],);//dis[i]表示第i个石子到第i-1个石子的距离差
dis[m+]=min(l-sz[m],);
for(int i=;i<=m;i++)
sum+=dis[i],flag[sum]=;
sum+=dis[m+];
for(int i=;i<=sum+;i++)
{
dp[i]=maxn;
for(int j=s;j<=t;j++)
{
if(i>=j)dp[i]=min(dp[i],dp[i-j]+flag[i]);
}
}
int minn=maxn;
for(int i=sum;i<=sum+;i++)
{
minn=min(minn,dp[i]);
}
printf("%d",minn);
return ;
}

完结/

也就是说,对于s=t=10的极端情况,只要看100的倍数上有没有石子统计一下就行了。

对于次大的情况s=9,t=10,时,只要把s

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. luoguP1502过河题解

    日常吐(fei)嘈(hua) 这道题作为最近卡了我3天的dp题(最后还是在题解的帮助下冥思苦想才过掉的题),窝觉得此题肥肠之脑洞,写此博客纪念 题解 过河 先来日常手玩样例: 咦感觉怎么手玩答案都像是 ...

  7. 洛谷 P1052 过河

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

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

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

  9. P1052 过河 线性dp

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

随机推荐

  1. cent7配置阿里yum源

    阿里云Linux安装镜像源地址:http://mirrors.aliyun.com/CentOS系统更换软件安装源第一步:备份你的原镜像文件,以免出错后可以恢复.mv /etc/yum.repos.d ...

  2. cdoj 574 High-level ancients dfs序+线段树 每个点所加权值不同

    High-level ancients Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/s ...

  3. 网络流Dinic--模板

    #define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include <cstdio>//sprintf islower isupp ...

  4. 用shell脚本安装MySQL-5.7.22-官方版本

    Install_CentOS7_MySQL57_binary.sh #!/bin/bash MySQL_Package=mysql-5.7.22-linux-glibc2.12-x86_64.tar. ...

  5. php实现只需要一个QQ号就可以获得用户信息

    <?php // 通过QQ号即可获取用户信息 // 获取QQ头像接口 // http://q1.qlogo.cn/g?b=qq&nk=QQ号&s=100&t=154790 ...

  6. MySQL 聚合函数与count()函数

    一.MySQL中的聚合函数 MySQL 5.7文档的章节:12.20.1 Aggregate (GROUP BY) Function “聚合/组合”函数(group (aggregate) funct ...

  7. poj 2891 模数不互质的中国剩余定理

    Strange Way to Express Integers Description Elina is reading a book written by Rujia Liu, which intr ...

  8. hdu 1087最长上升子序列和问题

    看来大佬的dp思路,在这里就简单的总结下吧. 拿到一个问题,先得考虑是否适用dp算法. 1,找到最优解的结构,看其子问题是否也满足最优化(子问题最优化问题) 2,  看时候有子问题重叠 确定一个问题可 ...

  9. Nginx用法详解

    nginx作为一个高性能的web服务器,想必大家垂涎已久,蠢蠢欲动,想学习一番了吧,语法不多说,网上一大堆.下面博主就nginx的非常常用的几个功能做一些讲述和分析,学会了这几个功能,平常的开发和部署 ...

  10. c++11 原生字符串字面值

    c++11 原生字符串字面值 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #in ...