P1052 过河 题解
复习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 过河 题解的更多相关文章
- 【洛谷】P1052 过河【DP+路径压缩】
P1052 过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙 ...
- 洛谷P1052 过河
P1052 过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上. 由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青 ...
- P1052 过河(离散化+dp)
P1052 过河 dp不难,重点是要想到离散化. 石子个数$<=100$意味着有大量空间空置,我们可以缩掉这些空间. 实现的话自己yy下就差不多了. #include<iostream&g ...
- P1052 过河(状态压缩)
P1052 过河(状态压缩) 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把 ...
- 洛谷p1052过河 路径压缩+dp
洛谷 P1052 过河 思路部分可以看这篇博客 我将在这里对其进行一些解释与补充 首先我们先看题 乍一看 这不是模板题吗 然后开开心心的敲了一个简单dp上去 #include<iostream& ...
- luoguP1502过河题解
日常吐(fei)嘈(hua) 这道题作为最近卡了我3天的dp题(最后还是在题解的帮助下冥思苦想才过掉的题),窝觉得此题肥肠之脑洞,写此博客纪念 题解 过河 先来日常手玩样例: 咦感觉怎么手玩答案都像是 ...
- 洛谷 P1052 过河
题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...
- P1052 过河 线性dp 路径压缩
题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...
- P1052 过河 线性dp
题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...
随机推荐
- ffmpeg学习笔记-编译脚本
之前已经用他人的编译脚本对ffmpeg进行了成功编译,那么在裁剪ffmpeg的时候需要指定文件,这时候应该怎么编写编译脚本呢?本文目的在于说明ffmpeg编译脚本的编写 首先在ffmpeg的目录下新建 ...
- ffmpeg学习笔记-ffmpeg在VS下的运用
ffmpeg官网提供了window平台下额开发工具供开发者使用,这篇文章主要以3.2版本的ffmpeg作为演示,记录在VS2013下,怎么去编译ffmpeg 下载 在官网中,按照以下步骤下载 下载Wi ...
- The timeout period elapsed prior to completion of the operation or the server is not responding.
问题:更新数据的状态值时,部分报出如下异常: 即时有成功更新,时有报错问题出现. 在LOG中发现成功更新的数据,存在更新时间过长问题,将近30秒(EF默认的CommandTimeout为30秒): 代 ...
- HDU3191 【输出次短路条数】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3191 How Many Paths Are There Time Limit: 2000/1000 M ...
- 自学电脑游戏第三天(Swing组件)
Swing组件 1.按钮(Jbutton) 示例:选择用户所喜欢的城市. import java.awt.*; import java.awt.event.*; import javax.swing. ...
- 《MIT 6.828 Lab 1 Exercise 4》实验报告
本实验链接:mit 6.828 lab1 Exercise 4. 题目 Exercise 4. Read about programming with pointers in C. The best ...
- [转帖]IIS7配置Gzip压缩
IIS7配置Gzip压缩 https://www.cnblogs.com/coce/p/6804373.html II7中自带了gzip功能,理论上应该比ii6配置起来应该简单一点,但是容易出的问 ...
- [转帖]localectl
localectl http://linux.51yip.com/search/localectl localectl 命令简介. 相关命令:暂无相关命令 localectl — 控制系统的本地化与键 ...
- 【IDEA插件】—— 代码量统计工具Statistic
1.下载 1.打开idea设置界面,选择 plugins标签 2.搜索“Statistic”插件,点击 install 3.重启IDEA 2.使用 1.菜单栏中找到view 2.在下层目录中找到Sta ...
- k8s-PV和PVC使用
上节课我们学习了 PV 的使用,但是在我们真正使用的时候是使用的 PVC,就类似于我们的服务是通过 Pod 来运行的,而不是 Node,只是 Pod 跑在 Node 上而已,所以这节课我们就来给大家讲 ...