您的位置:首页 > 其它

bzoj1721 [Usaco2006 Mar]Ski Lift 缆车支柱(dp)

2015-08-29 16:18 375 查看
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
);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息