洛谷P1052过河
不看数据范围的话是一个很简单的DP,可是加上数据范围之后就之前的做法就不行了。
所以我们考虑一下路径压缩。
小数据Code
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int l, m, s, t, dp[100010];
int flag[100010];
int main()
{
scanf("%d%d%d%d", &l, &s, &t, &m);
for (int i = 1; i <= m; i++)
{
int a;
scanf("%d", &a);
flag[a] = 1;
}
for (int i = 1; i <= l; i++)
{
dp[i] = 21474836;
for (int j = max(i - t, 0); j <= i - s; j++)
dp[i] = min(dp[i], dp[j] + flag[i]);
}
printf("%d", dp[l]);
}
大数据Code
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#define ha s * t
#define N 100111
#define inf 214748364
#define int long long
using namespace std;
int l, m, s, t, dp[N], ans = inf * 10, r;
int data[N], a[N], b[N];
inline void init()
{
scanf("%lld%lld%lld%lld", &l, &s, &t, &m);
for (int i = 1; i <= m; i++)
cin >> data[i];
sort(data + 1, data + 1 + m);
if (s == t)
{
int ans = 0;
for (int i = 1; i <= m; i++)
if (!(data[i] % s)) ans++;
printf("%lld", ans);
exit(0);
}
for (int i = 1; i <= m; i++)
{
int cha = data[i] - data[i - 1];
if (cha >= ha) cha = ha;
a[i] = a[i - 1] + cha;
b[a[i]] = 1;
}
r = a[m] + ha;
for (int i = 1; i <= r; i++)
dp[i] = inf;
}
signed main()
{
init();
for (int i = 1; i <= r; i++)
for (int j = s; j <= t; j++)
{
if (i >= j)
{
if (b[i]) dp[i] = min(dp[i - j] + 1, dp[i]);//如果该数已被标记,就要加1
else dp[i] = min(dp[i - j], dp[i]);
}
}
for (int i = a[m]; i <= r; i++)
ans = min(ans, dp[i]);
printf("%lld", ans);//输出最小值。
return 0;
}
洛谷P1052过河的更多相关文章
- 洛谷p1052过河 路径压缩+dp
洛谷 P1052 过河 思路部分可以看这篇博客 我将在这里对其进行一些解释与补充 首先我们先看题 乍一看 这不是模板题吗 然后开开心心的敲了一个简单dp上去 #include<iostream& ...
- 洛谷P1052 过河
P1052 过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上. 由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青 ...
- 洛谷 P1052 过河
题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...
- 洛谷P1052 过河【线性dp】【离散化】
题目:https://www.luogu.org/problemnew/show/P1052 题意: 青蛙要从0跳到超过$l$的地方,每一次可以跳$s$到$t$之间的任意数. 在河中有m个石头,要求在 ...
- 洛谷 P1052 过河 (离散化+dp)
dp非常好想, f[i] = min(f[i-len] + stone[i]) s <= len <= t 然后因为L非常大,所以我就不知道该怎么搞了 我看到m只有100,而L有1e9,我 ...
- 【题解】洛谷P1052 [NOIP2005TG] 过河(DP+离散化)
题目来源:洛谷P1052 思路 一开始觉得是贪心 但是仔细一想不对 是DP 再仔细一看数据不对 有点大 如果直接存下的话 显然会炸 那么就需要考虑离散化 因为一步最大跳10格 那么我们考虑从1到10都 ...
- 洛谷P1809 过河问题_NOI导刊2011提高(01)
To 洛谷.1809 过河问题 题目描述 有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸.而东岸边有一条小船. 船太小了,一次只能乘坐两人.每个人都有一个渡河时 ...
- 洛谷 P1002过河卒
洛谷 P1002过河卒 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点 ...
- 洛谷P1002——过河卒
又是洛谷题,要不是有小姐姐不会,我才不想动脑子.先贴一下题目地址https://www.luogu.org/problem/P1002 再贴一下题目: 我们读一下题目,这可不比学校的**算法题,读完一 ...
随机推荐
- NIO开发Http服务器(4):Response封装和响应
最近学习了Java NIO技术,觉得不能再去写一些Hello World的学习demo了,而且也不想再像学习IO时那样编写一个控制台(或者带界面)聊天室.我们是做WEB开发的,整天围着tomcat.n ...
- OO——UML解析
目录 第四单元博客作业 一.前两次作业架构设计 1. 第一次作业 2. 第二次作业 二.架构设计以及对OO方法理解的演进 1. 表达式求导 2. 多线程电梯 3. 地铁线路查询 4. UML图的解析 ...
- 基于【 springBoot +springCloud+vue 项目】一 || 后端搭建
缘起 本项目是基于之前学习的一个Dubbo+SSM分布式项目进行升级,基于此项目对前后端分离项目.微服务项目进一步深入学习.之前学习了vue.springBoot.springCloud后,没有进行更 ...
- Steam之两个list间交集、并集、差集
public static void main(String[] args) { List<String> list1 = new ArrayList(); list1.add(" ...
- 【转载】C#使用Math.Sqrt方法进行开平方操作
在C#的数学数值运算中,有时候需要进行对数值进行开平方操作,C#的数值计算类Math类中内置了开平方操作的方法Sqrt,直接调用此方法可计算出相应的平方值,Math.Sqrt方法签名为:double ...
- 虚拟机与宿主机可以互相ping通,但是外网不能
http://rickcheung.blog.51cto.com/913220/354429 1.CentOS 修改DNS 修改对应网卡的DNS的配置文件 # vi /etc/resolv.conf ...
- 移动Web深度剖析
随着前端技术的急速发展,随着互联网行业的日益发展,HTML5作为一种比较新型的开发技术早已经被很多大的企业所应用,通过HTML5语言可以开发适用于任何设备上的酷炫网站页面,所以HTML5的发展趋势可想 ...
- Centos6.10编译安装php-7.1.12并安装redis模块
1.服务器初始化 yum update -yyum install epel-release -yyum install gcc gcc-c++ wget lsof lrzsz telnet -y 2 ...
- 设置yum自动更新
[wang@brady ~]$ sudo yum -y install cronie yum-cron sudo vim /etc/yum/yum-cron.conf apply_updates = ...
- 判断是否发生url跳转
url="https://www.baidu.com/" url='http://www.freebuf.com/fevents/133225.html' # 方法一:禁止跳转:a ...