【USACO2006 Mar】 滑雪缆车 skilift

Time Limit 1000 ms
Memory Limit 131072 KBytes

Description

科罗拉多州的罗恩打算为奶牛建造一个滑雪场,为此要在山上规划一条缆车线路。

整座山可以用一条折线来描述,该折线有N个拐点,起点是1,终点是N。每个拐点的高度为Hi,相邻两个拐点之间的水平距离都是1。

缆车线路必须从起点开始修建,结束于终点。中间可以选择一些拐点安放缆绳的支柱,安全标准有两点:第一,缆绳的跨度有限制——相邻支柱的水平距离不能超过K;第二,缆绳的高度有限制——两根支柱之间的钢丝视作笔直的,在这座山的任何位置,钢丝都不能低于山的高度,但允许缆绳紧贴在山坡上或恰好穿过某个山峰。支柱相对于拐点的高度不计。

为了节约,罗恩希望修建的支柱越少越好,请帮他规划一下吧!当然,起点和终点上是一定要修建支柱的。

Input

第一行:两个用空格分开的整数:N和K,2 ≤ N ≤ 5000,1 ≤ K ≤ N − 1

第二行到N + 1行:第i + 1行有一个整数Hi,0 ≤ Hi ≤ ${10^9}$

Output

第一行:单个整数,表示最少需要修建的支柱数量

Sample Input

13 4
0
1
0
2
4
6
8
6
8
8
9
11
12

Sample Output

5

Hint

样例解释:支柱设在 1、5、7、9、13 号点处是最优方案。如果只设在 1、5、9、13 上,那么5 到9 就会有钢丝低于山坡的高度。如果只在 1、7、13 上修建,虽然高度符合要求,但这两段支柱的水平距离都超过了K。

Solution

身为菜鸡,打算再写一道dp

这道题的状态还是较容易设计的,即f[i]表示到第i个拐点所需设置的最少支柱数

那么一看数据范围,2000!!!!!!!!!!!

这就可以放心地乱搞写转移方程了

只要在前面的拐点中找到水平距离小于等于k且在这两个拐点之间所有拐点都不会插♂断这条缆绳的拐点,在这些拐点中求min(f[j])再加上改点即可

然后挂方程:$f[i] = \min \left\{ {\left. {f[j]} \right\}} \right. + 1,{\rm{1}} < = j < = i - 1$且j满足以上条件

那么我们现在就只剩下最后一个问题,如何判断缆绳不会被插♂断呢?

我们可以先做一个预处理,以(0,0)为坐标原点,把每个拐点写成一个点,显然,如果两个点之间没有点可以把缆绳插♂断,那么这两个点的所在的直线的斜率一定比前面那个点到两点之间每个点的斜率都要大

我们只需要用一个bool数组$b\left[ i \right]\left[ j \right]$来记录下第i个拐点是否能够达到第j个拐点

这样就能完美解决这道题了OwO

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
bool b[][];
int f[],a[];
double x=1e-;
bool check(double a,double b){return abs(a-b)<=x;}
int main()
{
int n,k;
scanf("%d%d",&n,&k);
for (int i=;i<=n;i++) scanf("%d",&a[i]);
for (int i=;i<=n;i++){
double lim=-2147483640.0;
for (int j=i+;j<=n;j++) {
if (check(lim,1.0*(a[j]-a[i])/(j-i))||lim<=1.0*(a[j]-a[i])/(j-i)) b[i][j]=true;
lim=max(lim,1.0*(a[j]-a[i])/(j-i));
}
}
f[]=;
for (int i=;i<=n;i++){
f[i]=;
for (int j=;j<=i-;j++)
if (b[j][i]&&i-j<=k) f[i]=min(f[i],f[j]+);
}
printf("%d",f[n]);
return ;
}

【USACO2006 Mar】滑雪缆车 skilift的更多相关文章

  1. [BZOJ1659][Usaco2006 Mar]Lights Out 关灯

    [BZOJ1659][Usaco2006 Mar]Lights Out 关灯 试题描述 奶牛们喜欢在黑暗中睡觉.每天晚上,他们的牲口棚有L(3<=L<=50)盏灯,他们想让亮着的灯尽可能的 ...

  2. Bzoj 1657: [Usaco2006 Mar]Mooo 奶牛的歌声 单调栈

    1657: [Usaco2006 Mar]Mooo 奶牛的歌声 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 631  Solved: 445[Submi ...

  3. BZOJ1657: [Usaco2006 Mar]Mooo 奶牛的歌声

    1657: [Usaco2006 Mar]Mooo 奶牛的歌声 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 489  Solved: 338[Submi ...

  4. 1657: [Usaco2006 Mar]Mooo 奶牛的歌声

    1657: [Usaco2006 Mar]Mooo 奶牛的歌声 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 526  Solved: 365[Submi ...

  5. bzoj1722: [Usaco2006 Mar] Milk Team Select 产奶比赛 树形dp

    题目链接 bzoj1722: [Usaco2006 Mar] Milk Team Select 产奶比赛 题解 dp[i][j][0 / 1] 以i为根的子数中 相邻点对选了j个的最大价值 代码 #i ...

  6. 1722: [Usaco2006 Mar] Milk Team Select 产奶比赛

    1722: [Usaco2006 Mar] Milk Team Select 产奶比赛 https://www.lydsy.com/JudgeOnline/problem.php?id=1722 分析 ...

  7. [Usaco2006 Mar]Mooo 奶牛的歌声(单调栈裸题)

    1657: [Usaco2006 Mar]Mooo 奶牛的歌声 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 961  Solved: 679[Submi ...

  8. [BZOJ1721][Usaco2006 Mar]Ski Lift 缆车支柱

    Description Farmer Ron in Colorado is building a ski resort for his cows (though budget constraints ...

  9. luogu 4909 [Usaco2006 Mar]Ski Lift 缆车支柱 动态规划

    可以出模拟赛T1? #include <bits/stdc++.h> #define N 5002 #define inf 1000000 #define setIO(s) freopen ...

随机推荐

  1. 解决Python打包exe控制台无法粘贴问题

    使用pyinstaller打包生成可执行exe文件后,发现启用input()接受键盘输入时窗口无法粘贴也无法右键,找了好久终于找到问题所在: 一是通过右键单击控制台主题边框在弹出的菜单中选择编辑.粘贴 ...

  2. Linux 复习四

    第四章 shell程序设计I-入门 一.shell脚本的基本概念 shell脚本(script)是一个可执行的纯文本文件,有多个shell命令组成. 命令的执行时从上而下.从左而右的分析和执行 命令. ...

  3. 解决Web部署 woff字体 404错误

    问题:刚刚在IIS上部署web项目的时候,发现浏览器总是报找不到woff字体的错误.导致浏览器加载字体报404错误. 原因:因为服务器IIS不认WOFF这个文件类型,只要在IIS上添加MIME 类型即 ...

  4. POJ 1226 Substrings

    Substrings Time Limit: 1000ms Memory Limit: 10000KB This problem will be judged on PKU. Original ID: ...

  5. nyoj 8 一种排序(用vector,sort,不用set)

    一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数 ...

  6. BAT、网易、京东等如何做大数据风控的?

    大数据风控目前应该是前沿技术在金融领域的最成熟应用,相对于智能投顾.区块链等还在初期的金融科技应用,大数据风控目前已经在业界逐步普及,从BATJ这样的大企业,到交易规模比较大的网贷平台,再到做现金贷. ...

  7. XOR的艺术

    题目描述 AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的01串. 2. 给定一个范围[l,r ...

  8. django自身提供的sitemap和feed实现样例

    <DJANGO BY EXAMPLE>这书的例子真是精心全过的, 基本的WEB开发过程全覆盖啊. 跟着一步一步的弄就OK啦..可以长很多知道的. 这次跟着作的是sitemap和feed功能 ...

  9. Ubuntu 16.04设置开机关机时显示命令详细信息不显示进度条Logo

    1.编辑grub文件 sudo gedit /etc/default/grub 把 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 改成 GRU ...

  10. 关于System.Convert那些事

    关于System.Convert那些事 前言 不知咋的,今天腰疼的不行,疼的站不起来了,今下午突然就疼起来了,唉,这是身体要垮了的节奏啊,再加上自己的VAX试用期到了,弄了半天也不行,烦. 正文 看到 ...