[luogu4265][USACO18FEB]Snow Boots silver
题目大意
求出最少需要丢去多少双靴子才能到达终点。
解法
解法一:
看到数据的范围,非常清楚\(O(n^3)\)能过掉所有的数据,那么我们就果断暴力。
解法二:
比较容易会想到用DP做,我一开始定义\(f[i][j]\)表示前\(i\)个格子,现在穿了第\(j\)双时的最小丢弃数。
那么决策就是每次枚举前面的第\(k\)个格子,和现在穿了第\(p\)双时的最小丢弃数,计算两者之间的距离,在转移。
但是这样无法判断是否要丢弃出最上面的那一双,这样写感觉非常的麻烦。
所以就换了一种状态:\(f[i][j]\)表示前\(i\)个格子用\(j\)双靴子能否走到。
那么我们的边界就是\(f[1][1]=1\)
而转移就非常的简单了:如果当前的状态是true,也就是能用\(j\)双到达\(i\),那么就枚举下一双\(k\),如果满足所有题目中的约束条件,那么就转移。
这样的复杂度看似是\(O(n^4)\),但是呢?我们中间有很多不会访问到的状态,一双鞋子能够更新的答案的个数是很少的。
解法三:
看到有大佬用了一维就做了出了答案,非常的好奇,看了一下,但是觉得这样思路是一样的,就是压缩了一维状态。我谈一下我的理解:\(f[i]\)表示前\(i\)个格子能否被达到,那么我们就用\(j\)来更新这个\(f\)数组,如果能够达到,而且满足题目中的约束条件,那么就说明就可以用第\(j\)双靴子来更新后面的答案,那么我们第一次更新到终点的答案就是我们的要求求解的答案。
ac代码
# include <cstdio>
# include <cstring>
# include <algorithm>
# include <ctype.h>
# include <iostream>
# include <cmath>
# define LL (long long)
# define ms(a,b) memset(a,b,sizeof(a))
# define ri (register int)
# define inf (0x7f7f7f7f)
# define pb push_back
# define fi first
# define se second
# define pii pair<int,int>
using namespace std;
inline int gi(){
int w=0,x=0;char ch=0;
while(!isdigit(ch)) w|=ch=='-',ch=getchar();
while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return w?-x:x;
}
# define N (255)
int n,b;
int dep[N],d[N],s[N];
bool f[N][N];
int main(){
n=gi(),b=gi();
for (int i=1;i<=n;i++) dep[i]=gi();
for (int i=1;i<=b;i++) s[i]=gi(),d[i]=gi();
ms(f,0); f[1][1]=1;
for (int i=1;i<=n;i++)
for (int j=1;j<=b;j++)
if (f[i][j])
for (int k=j;k<=b;k++)
if (dep[i]<=s[k])
for (int q=i+1;q<=min(n,i+d[k]);q++)
if (s[k]>=dep[q]) f[q][k]=1;
for(int i=1;i<=b;i++)
if (f[n][i]){
printf("%d\n",i-1);
return 0;
}
return 0;
}
[luogu4265][USACO18FEB]Snow Boots silver的更多相关文章
- 线段树||BZOJ5194: [Usaco2018 Feb]Snow Boots||Luogu P4269 [USACO18FEB]Snow Boots G
题面:P4269 [USACO18FEB]Snow Boots G 题解: 把所有砖和靴子排序,然后依次处理每一双靴子,把深度小于等于它的砖块都扔线段树里,问题就转化成了求线段树已有的砖块中最大的砖块 ...
- [USACO18FEB]Snow Boots S
提供一种无脑DP做法 题目中大概有这么些东西:位置,穿鞋,跑路 数据小,那么暴力开数组暴力DP吧 设dp[i][j]表示穿着鞋子j,到达位置i是否可行 无脑转移 枚举位置,正在穿哪双鞋,换成哪双走出去 ...
- [USACO18FEB] Snow Boots G (离线+并查集)
题目大意:略 网上各种神仙做法,本蒟蒻只想了一个离线+并查集的做法 对所有靴子按最大能踩的深度从大到小排序,再把所有地砖按照积雪深度从大到小排序 一个小贪心思想,我们肯定是在 连续不能踩的地砖之前 的 ...
- BZOJ 5194--[Usaco2018 Feb]Snow Boots(STL)
5194: [Usaco2018 Feb]Snow Boots Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 81 Solved: 61[Submi ...
- BZOJ5194: [Usaco2018 Feb]Snow Boots(排序&set)(可线段树优化)
5194: [Usaco2018 Feb]Snow Boots Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 102 Solved: 79[Subm ...
- 2019 GDUT Rating Contest II : Problem G. Snow Boots
题面: G. Snow Boots Input file: standard input Output file: standard output Time limit: 1 second Memory ...
- 【BZOJ5194】Snow Boots
[原题题面]传送门 [简化题意] 给定一个长度为n的序列. 有m次询问,每次询问给定两个数si,di.你一开始站在0,每次你可以走不超过di,但你到达的位置的数不能超过si.问能否走到n+1. n,m ...
- luogu4269 Snow Boots G (并查集)
对于某个靴子,如果0代表某个格能走,1代表不能走,那么只要连续的1的个数的最大值>=靴子的步长,那这个靴子就不能用. 那么只要对靴子和格子都按深度排个序,然后从大到小来扫一遍(靴子越来越浅,能走 ...
- Bzoj[Usaco2018 Feb]5194 Snow Boots(线段树)
Description 到冬天了,这意味着下雪了!从农舍到牛棚的路上有N块地砖,方便起见编号为1…N,第i块地砖上积了fi英尺的雪 .在Farmer John的农舍的地窖中,总共有B双靴子,编号为1… ...
随机推荐
- VB6 变量定义作用域的一个奇特形式
C#或JAVA 下面的i定义是只会限定在if 条件块里的: if (1 == 2) { int i = 000; } else { i = 111;// 错误,未定义. } i = 222;//错误 ...
- MVC4程序运行报错
近期了解MVC4的时候弄了一个简单的小工程,使用Entity Framework作为Model,F5启动调试运行的时候没有问题,但是发布到IIS之后访问就报错 错误信息如下: The Entity F ...
- Android开发——ListView使用技巧总结(二)
0. 前言 Android中的ListView是用的比较多的控件之一,在上一篇Android开发--ListView使用技巧总结(一)中对ListView的ViewHolder机制.优化卡顿方式以及 ...
- NIO之缓冲区
NIO引入了三个概念: Buffer 缓冲区 Channel 通道 selector 选择器 1.java.io优化建议 操作系统与Java基于流的I/O模型有些不匹配.操作系统要移动的是大块数据(缓 ...
- LeetCode Search Insert Position (二分查找)
题意 Given a sorted array and a target value, return the index if the target is found. If not, return ...
- LVM : 快照
LVM 机制还提供了对 LV 做快照的功能,也就是说可以给文件系统做一个备份,这也是设计 LVM 快照的主要目的.LVM 的快照功能采用写时复制技术(Copy-On-Write,COW),这比传统的备 ...
- Nextcloud私有云盘在Centos7下的部署笔记
搭建个人云存储一般会想到ownCloud,堪称是自建云存储服务的经典.而Nextcloud是ownCloud原开发团队打造的号称是“下一代”存储.初一看觉得“口气”不小,刚推出来就重新“定义”了Clo ...
- 查看服务器系统资源(cpu,内容)利用率前几位的进程的方法
在日常运维工作中,我们经常需要了解服务器上的系统资源的使用情况,要清楚知道一些重要进程所占的资源比例.这就需要熟练掌握下面几个命令的使用: 1)查看占用CPU最高的5个进程 # ps aux | so ...
- Gitblit版本服务器环境部署记录
Gitblit介绍Gitblit 是一个纯 Java 库用来管理.查看和处理 Git 资料库.相当于 Git 的 Java 管理工具,支持linux系统.Git是分布式版本控制系统,它强调速度.数据一 ...
- 微信小程序中的组件
前言 之前做小程序开发的时候,对于开发来说比较头疼的莫过于自定义组件了,当时官方对这方面的文档也只是寥寥几句,一笔带过而已,所以写起来真的是非常非常痛苦!! 好在微信小程序的库从 1.6.3 开始,官 ...