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

可以出模拟赛T1? 

#include <bits/stdc++.h>
#define N 5002  
#define inf 1000000 
#define setIO(s) freopen(s".in","r",stdin) 
using namespace std;     
int f[N],h[N];   
double slope(int i,int j) 
{
    double dx=(double)i-j;   
    double dy=(double)(h[i]-h[j]); 
    if(dy==0) return 0.0;    
    return dy/dx;     
}
int main() 
{ 
    int i,j,n,m;   
    // setIO("input");    
    scanf("%d%d",&n,&m); 
    for(i=1;i<N;++i) f[i]=inf;     
    for(i=1;i<=n;++i) scanf("%d",&h[i]);      
    f[1]=1;    
    for(i=1;i<n;++i) 
    {
        double pre=-100000000000.00;       
        for(j=i+1;j<=n;++j) 
        {
            if(j-i>m) break;       
            double cur=slope(i,j);          
            if(cur>=pre) 
            { 
                pre=max(pre, cur);   
                f[j]=min(f[j], f[i]+1);   
            } 
        }
        // printf("%d %d\n",i,f[i]);      
    }    
    printf("%d\n",f[n]); 
    return 0;     
}

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值