博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu2993之斜率dp+二分查找
阅读量:6759 次
发布时间:2019-06-26

本文共 2714 字,大约阅读时间需要 9 分钟。

MAX Average Problem

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5825    Accepted Submission(s): 1446


Problem Description
Consider a simple sequence which only contains positive integers as a1, a2 ... an, and a number k. Define ave(i,j) as the average value of the sub sequence ai ... aj, i<=j. Let’s calculate max(ave(i,j)), 1<=i<=j-k+1<=n.
 

Input
There multiple test cases in the input, each test case contains two lines.
The first line has two integers, N and k (k<=N<=10^5).
The second line has N integers, a1, a2 ... an. All numbers are ranged in [1, 2000].
 

Output
For every test case, output one single line contains a real number, which is mentioned in the description, accurate to 0.01.
 

Sample Input
 
10 6 6 4 2 10 3 8 5 9 4 1
 

Sample Output
 
6.50

直接斜率DP:O(N)

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define INF 99999999typedef long long LL;using namespace std;const int MAX=100000+10;int n,k;int s[MAX],q[MAX];double dp[MAX],sum[MAX];double GetY(int i,int j){ return sum[i]-sum[j];}int GetX(int i,int j){ return i-j;}double DP(){ int head=0,tail=1; q[head]=0; double ans=0; for(int i=1;i<=n;++i)sum[i]=sum[i-1]+s[i]*1.0; for(int i=k;i<=n;++i){ int j=i-k; while(head+1
'9')ch=getchar(); while(ch>='0' && ch<='9')num=num*10+ch-'0',ch=getchar(); return num;}int main(){ while(~scanf("%d%d",&n,&k)){ for(int i=1;i<=n;++i)s[i]=input(); printf("%0.2lf\n",DP()); } return 0;}斜率DP+二分查找:#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define INF 99999999typedef long long LL;using namespace std;const int MAX=100000+10;int n,k;int s[MAX],q[MAX];LL sum[MAX];LL GetY(int i,int j){ return sum[i]-sum[j];}int GetX(int i,int j){ return i-j;}LL check(int mid,int i){ return GetY(i,q[mid+1])*GetX(q[mid+1],q[mid])-GetY(q[mid+1],q[mid])*GetX(i,q[mid+1]);}int search(int l,int r,int i){ //由于斜率单调递增 /*int top=r; while(l<=r){//依据i与mid的斜率 和 i与mid+1的斜率之差求切点 if(l == r && l == top)return q[l];//这里一定要注意假设切点是最后一个点须要另判,由于mid+1不存在会出错 int mid=(l+r)>>1; if(check(mid,i)<0)r=mid-1; else l=mid+1; }*/ while(l
>1; if(check(mid,i)<0)r=mid; else l=mid+1; } return q[l];}double DP(){ int head=0,tail=1,p; q[head]=0; double ans=0,dp; for(int i=1;i<=n;++i)sum[i]=sum[i-1]+s[i]; for(int i=k;i<=n;++i){ int j=i-k; while(head+1
ans)ans=dp; } return ans;}int input(){//加速外挂 char ch=' '; int num=0; while(ch<'0' || ch>'9')ch=getchar(); while(ch>='0' && ch<='9')num=num*10+ch-'0',ch=getchar(); return num;}int main(){ while(~scanf("%d%d",&n,&k)){ for(int i=1;i<=n;++i)s[i]=input(); printf("%0.2lf\n",DP()); } return 0;}

转载地址:http://ifweo.baihongyu.com/

你可能感兴趣的文章
Windows Mysql Server重启, log-bin路径配置
查看>>
刘剑锋:友云采助力企业数字化采购的新发展
查看>>
Rainbond 5.0.4 发布,做最好用的云应用操作系统
查看>>
亚马逊宣布与西云数据达成合作,旨在进一步扩大中国业务
查看>>
java nio的基础--缓冲区
查看>>
负载均衡沙龙活动第二期现场问答汇集
查看>>
GBDT原理及利用GBDT构造新的特征-Python实现
查看>>
Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(10)...
查看>>
【Xamarin.Forms】在XAML中传递参数
查看>>
关于数据仓库 — 总体工具介绍
查看>>
最大的错误是不敢犯错
查看>>
跟我学交换机配置(七)
查看>>
makefile 中 $@ $^ % 2015-04-11 18:02:36
查看>>
C#强化系列文章三:实验分析C#中三种计时器使用异同点
查看>>
Linux 进程间通信(一)
查看>>
通用对象池ObjectPool的一种简易设计和实现方案
查看>>
HTTP压缩仍让加密连接处于风险之中
查看>>
乐视阿里达成百亿元销售框架
查看>>
戴尔通过提升大数据分析能力巩固“全数据”战略 帮助企业在现代数据经济中蓬勃发展...
查看>>
⑤Windows Server 8 RemoteFX体验
查看>>