zoukankan      html  css  js  c++  java
  • HDU 2993 MAX Average Problem

    第一道斜率优化DP题
     
    方法:参考论文《浅谈数形结合思想在信息学竞赛中的应用》 的例2 构造凸包 求切点
     
    代码:

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;

    const int N=100010;

    int n,k;
    int a[N],sum[N];
    int que[N],st,ed;
    double dp[N];




    double slope(int j,int i) {
        return (sum[j]-sum[i])*1.0/(j-i);
    }


    int main() {
        while(scanf("%d%d",&n,&k)!=EOF) {
            for(int i=1;i<=n;i++) scanf("%d",&a[i]);
            for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i];
            st=ed=0;
            double ans=0.0;
            for(int i=1;i+k-1<=n;i++) {
                que[ed++]=i-1;
                while(ed-st>=3 && slope(que[ed-1],que[ed-2]) < slope(que[ed-2],que[ed-3])) que[ed-2]=que[ed-1],ed--;
                while(ed-st>=2 && slope(i+k-1,que[st]) <= slope(i+k-1,que[st+1])) st++;
                dp[i]=slope(i+k-1,que[st]);
                ans=max(ans,dp[i]);
            }
            printf("%.2lf\n",ans);
        }
        return 0;
    }
  • 相关阅读:
    数字以万做单位——Java
    创建二维码工具类——Java
    Java 截取指定长度的字符串
    堆排序
    context:component-scan 的使用说明
    @Autowired @Resource @Qualifier的区别
    声明对象和创建对象的区别
    maven 命令
    maven 创建
    maven pom.xml文件
  • 原文地址:https://www.cnblogs.com/programCaiCai/p/HDU2993.html
Copyright © 2011-2022 走看看