题目

不看数据范围的话是一个很简单的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过河的更多相关文章

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

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

  2. 洛谷P1052 过河

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

  3. 洛谷 P1052 过河

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

  4. 洛谷P1052 过河【线性dp】【离散化】

    题目:https://www.luogu.org/problemnew/show/P1052 题意: 青蛙要从0跳到超过$l$的地方,每一次可以跳$s$到$t$之间的任意数. 在河中有m个石头,要求在 ...

  5. 洛谷 P1052 过河 (离散化+dp)

    dp非常好想, f[i] = min(f[i-len] + stone[i]) s <= len <= t 然后因为L非常大,所以我就不知道该怎么搞了 我看到m只有100,而L有1e9,我 ...

  6. 【题解】洛谷P1052 [NOIP2005TG] 过河(DP+离散化)

    题目来源:洛谷P1052 思路 一开始觉得是贪心 但是仔细一想不对 是DP 再仔细一看数据不对 有点大 如果直接存下的话 显然会炸 那么就需要考虑离散化 因为一步最大跳10格 那么我们考虑从1到10都 ...

  7. 洛谷P1809 过河问题_NOI导刊2011提高(01)

    To 洛谷.1809 过河问题 题目描述 有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸.而东岸边有一条小船. 船太小了,一次只能乘坐两人.每个人都有一个渡河时 ...

  8. 洛谷 P1002过河卒

    洛谷 P1002过河卒 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点 ...

  9. 洛谷P1002——过河卒

    又是洛谷题,要不是有小姐姐不会,我才不想动脑子.先贴一下题目地址https://www.luogu.org/problem/P1002 再贴一下题目: 我们读一下题目,这可不比学校的**算法题,读完一 ...

随机推荐

  1. idea 中激活 JRebel

    JRebel介绍: JRebel是一款JVM插件,它使得Java代码修改后不用重启系统,立即生效.IDEA上原生是不支持热部署的,一般更新了 Java 文件后要手动重启 Tomcat 服务器,修改才能 ...

  2. pytorch learning rate decay

    关于learning rate decay的问题,pytorch 0.2以上的版本已经提供了torch.optim.lr_scheduler的一些函数来解决这个问题. 我在迭代的时候使用的是下面的方法 ...

  3. SpringBoot +MSSQL

    ____SpringBoot +MSSQL_______________________________________________________________________________ ...

  4. 记录Quarter的基本使用

    原文:记录Quarter的基本使用 using Quartz; using Quartz.Impl; using Quartz.Impl.Matchers; using Quartz.Logging; ...

  5. java之struts2之异常处理

    1.在应用项目中,异常的出现时很正常的.而且项目上线后发生异常也很正常的.那么需要对这些异常有相应的处理机制,以便客户能够看你到更加友好的界面.Struts2中提供了异常处理机制. 2.Struts中 ...

  6. 【Java拾遗】Java transient关键字

    1. transient的作用及使用方法 2. transient使用小结 3. transient使用细节--被transient关键字修饰的变量真的不能被序列化吗? 1. transient的作用 ...

  7. Wireless support

    Wireless support 参考: https://www.rhyous.com/2010/12/03/freebsd-wireless-configuring-a-wireless-inter ...

  8. Dubbo的10种集群容错模式

    学习Dubbo源码的过程中,首先看到的是dubbo的集群容错模式,以下简单介绍10种集群容错模式 1.AvailableCluster 顾名思义,就是可用性优先,遍历所有的invokers,选择可用的 ...

  9. 【转载】C#中string类使用Replace方法来替换字符串

    在C#的字符串操作过程中,有时候需要替换字符串中的某个子字符串,此时就可以使用到字符串类自带的Replace方法来实现,Replace方法将查找到所有符合被替换的子字符串,然后将之全部替换为目标字符串 ...

  10. 造成thrift 编译构建项目失败的原因之一:thrift环境变量没设置

    由于重装了系统和IDEA工具,打开原项目时使用install 构建使用thrift 协议的项目时失败.下面是说说我遇到的问题 看下图,就是构建时控制台输出的日志,因为是乱码,当时没重视,就先去检查po ...