洛谷 P1052 过河 (离散化+dp)
dp非常好想, f[i] = min(f[i-len] + stone[i]) s <= len <= t
然后因为L非常大,所以我就不知道该怎么搞了
我看到m只有100,而L有1e9,我就知道肯定要通过某种数学方法来离散化
然而我并没有想出来这个数学方法
看来题解,原来这个方法很简单,我怎么就没有想到
因为最大走10步,所以把距离对1到10的最小公倍数是2520取模就好了。
离散化之后就可以愉快地dp了
#include<cstdio>
#include<algorithm>
#include<cstring>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
#define _for(i, a, b) for(int i = (a); i <= (b); i++)
using namespace std;
const int MAXM = 312345;
const int MAXN = 112;
int f[MAXM], a[MAXN], d[MAXN];
int stone[MAXM], s, t, n, L;
int main()
{
scanf("%d%d%d%d", &L, &s, &t, &n);
_for(i, 1, n) scanf("%d", &a[i]);
sort(a + 1, a + n + 1);
_for(i, 1, n) d[i] = (a[i] - a[i-1]) % 2520;
_for(i, 1, n) a[i] = a[i-1] + d[i], stone[a[i]] = 1;
L = a[n];
memset(f, 0x3f, sizeof(f));
f[0] = 0;
_for(i, 1, L + t)
_for(len, s, min(i, t))
f[i] = min(f[i], f[i-len] + stone[i]);
int ans = 1e8;
_for(i, L, L + t)
ans = min(ans, f[i]);
printf("%d\n", ans);
return 0;
}
当然还有更好的优化方式
当距离小于t时保持不变,大于t时,改成d % t + t(一定要再加上t!!!)
我一开始是有想到,但是我想到还有s,s+1等
说实话不用想得这么完美,直接用最大的t模就好了。
这样空间可以开小很多。
#include<cstdio>
#include<algorithm>
#include<cstring>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
#define _for(i, a, b) for(int i = (a); i <= (b); i++)
using namespace std;
const int MAXM = 2123;
const int MAXN = 112;
int f[MAXM], a[MAXN], d[MAXN];
int stone[MAXM], s, t, n, L;
int main()
{
scanf("%d%d%d%d", &L, &s, &t, &n);
_for(i, 1, n) scanf("%d", &a[i]);
sort(a + 1, a + n + 1);
_for(i, 1, n)
{
d[i] = a[i] - a[i-1];
if(d[i] > t) d[i] = (d[i] % t) + t;
}
_for(i, 1, n) a[i] = a[i-1] + d[i], stone[a[i]] = 1;
L = a[n];
memset(f, 0x3f, sizeof(f));
f[0] = 0;
_for(i, 1, L + t)
_for(len, s, min(i, t))
f[i] = min(f[i], f[i-len] + stone[i]);
int ans = 1e8;
_for(i, L, L + t)
ans = min(ans, f[i]);
printf("%d\n", ans);
return 0;
}
洛谷 P1052 过河 (离散化+dp)的更多相关文章
- 洛谷p1052过河 路径压缩+dp
洛谷 P1052 过河 思路部分可以看这篇博客 我将在这里对其进行一些解释与补充 首先我们先看题 乍一看 这不是模板题吗 然后开开心心的敲了一个简单dp上去 #include<iostream& ...
- 洛谷P1052 过河
P1052 过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上. 由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青 ...
- 洛谷P1052 过河【线性dp】【离散化】
题目:https://www.luogu.org/problemnew/show/P1052 题意: 青蛙要从0跳到超过$l$的地方,每一次可以跳$s$到$t$之间的任意数. 在河中有m个石头,要求在 ...
- 洛谷1052——过河(DP+状态压缩)
题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...
- 洛谷 P1052 过河
题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...
- 洛谷P1052过河
题目 不看数据范围的话是一个很简单的DP,可是加上数据范围之后就之前的做法就不行了. 所以我们考虑一下路径压缩. 小数据Code #include <iostream> #include ...
- 【题解】洛谷P1052 [NOIP2005TG] 过河(DP+离散化)
题目来源:洛谷P1052 思路 一开始觉得是贪心 但是仔细一想不对 是DP 再仔细一看数据不对 有点大 如果直接存下的话 显然会炸 那么就需要考虑离散化 因为一步最大跳10格 那么我们考虑从1到10都 ...
- 洛谷 P1002过河卒
洛谷 P1002过河卒 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点 ...
- 洛谷P1809 过河问题_NOI导刊2011提高(01)
To 洛谷.1809 过河问题 题目描述 有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸.而东岸边有一条小船. 船太小了,一次只能乘坐两人.每个人都有一个渡河时 ...
随机推荐
- 装饰器阶段性练习(题目)[转载http://www.cnblogs.com/linhaifeng/p/7278389.html]
# 一:编写函数,(函数执行的时间是随机的)# 二:编写装饰器,为函数加上统计时间的功能# 三:编写装饰器,为函数加上认证的功能## 四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件 ...
- (3)pyspark----dataframe观察
1.读取: sparkDF = spark.read.csv(path) sparkDF = spark.read.text(path) 2.打印: sparkDF.show()[这是pandas中没 ...
- Cookie和Session有什么区别
1. 由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识别具体的用户,这个机制就是Session. 典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状 ...
- 使用yum方式安装mysql5.6
1.新开的云服务器,需要检测系统是否自带安装mysql # yum list installed | grep mysql 2.如果发现有系统自带mysql,果断这么干 # yum -y remove ...
- webpack配置相关的页面异常
原文:https://www.cnblogs.com/Hsong/p/9023341.html 前言 在团队协作开发中,为了统一代码风格,避免一些低级错误,应该设有团队成员统一遵守的编码规范.很多语言 ...
- webpack不打包指定的js文件
背景: 在项目实际开发中,有一些IP地址需要随时修改,进行部署,例如websocket的地址.因此在项目打包的时候,不希望保持IP地址的文件被打包,因此就需要把需要修改的常量独立出来,存放在一个js文 ...
- plsql 中出现 Dynamic Performance Tables not accessible 问题解决
产生该提示原因: plsql dev在用户运行过程中,要收集用户统计信息,但是由于你现在登录的用户没有访问v$session,v$sesstat and v$statname视图的权限, 所以不能收集 ...
- ES6重点知识点总结(2)
ES6重点知识点总结(2) call和apply的作用是什么?区别是什么? call和apply的功能基本相同,都是实现继承或者转换对象指针的作用: 唯一不通的是前者参数是罗列出来的,后者是存到数组中 ...
- UVALive 5412 Street Directions
Street Directions Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVALive. ...
- [using_microsoft_infopath_2010]Chapter5 为表单添加逻辑规则
本章概要: 1.在表单中使用逻辑和验证,不写代码 2.使用规则任务板 3.添加表单条件格式 4.通过函数和公式添加更加高级的规则 5.通过对驶入使用规则创建直观的用户界面