科罗拉多州的山脉是二维平面上的一条折线。这条折线由 NN 个端点,N−1N−1 段线段组成,第 ii 个端点的横坐标就是 ii,纵坐标是 H_iHi,纵坐标代表高度,也可以称为海拔。
罗恩打算为奶牛建造一个滑雪场,为此要在山脉上规划一条缆车线路。缆线也是一条折线,由若干段缆绳组成,起点在山脉的第一个端点,终点在最后一个端点。每段缆绳可以贴着山脉的轮廓,也可以悬浮于空中,跳过山脉上几个海拔低的端点。每段缆绳的水平跨度有限制,不能超过给定的整数 L。罗恩需要在每段缆绳的端点处修建支柱,用来固定缆绳。
请帮助他规划一下,选择在山脉的哪些端点上修建,才能使得支柱数量最少?注意,根据题意,起点和终点上是一定要修建的。
dp ,f[i] =f[j]+1
转移的条件 : slope(j,i) <= slope(k,i)
#include <iostream>
#include <cstring>
using namespace std ;
const int N=5e3+2,inf=1e9;
int f[N],n,L;
double h[N];
double func(int x,int y){
return (h[x]-h[y])/(x-y);
}
void solve(){
int i,j; double t;
memset(f,127,sizeof f);
f[1]=1;
for(i=2;i<=n;i++){
t=inf;
for(j=i-1;j>0&&i-j<=L;j--){
if(func(i,j)<=t)
f[i]=min(f[i],f[j]+1),t=func(i,j);
}
}
cout<<f[n];
}
signed main(){
cin>>n>>L;
for(int i=1;i<=n;i++) cin>>h[i];
solve();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!