bzoj1721 [Usaco2006 Mar]Ski Lift 纜車支柱(dp)

f [ i ]表示前 i 個柱子最少選f[ i ]個,維護斜率。

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long ll;
ll n,m;
ll high[5005];
ll f[5005];
int main()
{
    scanf("%lld %lld",&n,&m);
    high[0]=0;
    for(ll i=1;i<=n;i++)
    {
        scanf("%lld",&high[i]);
    }
    memset(f,0x3f,sizeof(f));
    f[1]=1;
    for(ll i=2;i<=n;i++)
    {
        double minn=999999999;//0x3f3f3f3f掛。
        for(ll j=i-1;j>=i-m;j--)
        {
            if(j<=0)break;
            if((double)(high[i]-high[j])/(double)(i-j)<=minn)//注意:再設一個變量K表示斜率,用K和minn比較就會WA。。。
            {
                f[i]=min(f[i],f[j]+1);
                minn=(double)(high[i]-high[j])/(double)(i-j);
            }
        }
    }
    printf("%lld",f[n]);
}


發佈了59 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章