HDU 2993 MAX Average Problem(斜率优化DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2993
题目大意:给定一个长度为n(最长为10^5)的正整数序列,求出连续的最短为k的子序列平均值的最大值。
分析:斜率优化DP,要认真看
代码如下:
# include<iostream>
# include<cstdio>
# include<cstring>
# include<algorithm> using namespace std; const int maxn = ;
double a[maxn], sum[maxn];
int n,k;
int q[maxn],head,tail; //读入优化,否则超时
int GetInt()
{
char ch=getchar();
while(ch<'' || ch>'')
ch = getchar();
int num = ;
while(ch >= '' && ch<='')
{
num = num* + ch - '';
ch = getchar();
}
return num;
} void DP()
{
head = tail =;
double ans = -;
for(int i=k; i<=n; i++)
{
int j = i-k;
//维护下凸
while(tail - head >=)
{
double x1 = j - q[tail-];
double y1 = sum[j] - sum[q[tail-]];
double x2 = q[tail-] - q[tail-];
double y2 = sum[q[tail-]] - sum[q[tail-]];
if(x1 * y2 - y1 *x2 >= )
tail--;
else
break;
}
q[tail++] = j;
//寻找最优解并删除无用元素
while(tail - head >=)
{
double x1 = i - q[head];
double y1 = sum[i] - sum[q[head]];
double x2 = i - q[head+];
double y2 = sum[i] - sum[q[head+]];
if(x1*y2 - y1*x2 >= )
head ++;
else
break;
}
double tmp = (sum[i] - sum[q[head]])/(i-q[head]);
ans = max(ans, tmp);
}
printf("%.2lf\n",ans);
} int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d%d",&n,&k)!=EOF)
{
sum[] = ;
for(int i=; i<=n; i++)
{
a[i] = GetInt();
sum[i] = sum[i-] + a[i];
}
DP();
}
return ;
}
HDU 2993 MAX Average Problem(斜率优化DP)的更多相关文章
- hdu 2993 MAX Average Problem(斜率DP入门题)
题目链接:hdu 2993 MAX Average Problem 题意: 给一个长度为 n 的序列,找出长度 >= k 的平均值最大的连续子序列. 题解: 这题是论文的原题,请参照2004集训 ...
- HDU 2993 - MAX Average Problem - [斜率DP]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2993 Consider a simple sequence which only contains p ...
- HDU 2993 MAX Average Problem dp斜率优化
MAX Average Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- 数据结构:HDU 2993 MAX Average Problem
MAX Average Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- HDU 2993 MAX Average Problem(斜率优化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2993 Problem Description Consider a simple sequence w ...
- HDU 2993 MAX Average Problem(斜率DP经典+输入输出外挂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2993 题目大意:给出n,k,给定一个长度为n的序列,从其中找连续的长度大于等于k的子序列使得子序列中的 ...
- HDU 3045 Picnic Cows(斜率优化DP)
Picnic Cows Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 3507 Print Article(斜率优化DP)
题目链接 题意 : 一篇文章有n个单词,如果每行打印k个单词,那这行的花费是,问你怎么安排能够得到最小花费,输出最小花费. 思路 : 一开始想的简单了以为是背包,后来才知道是斜率优化DP,然后看了网上 ...
- UVALive 4726 Average ——(斜率优化DP)
这是第一次写斜率优化DP= =.具体的做法参照周源论文<浅谈数形结合思想在信息学竞赛中的应用>.这里仅提供一下AC的代码. 有两点值得注意:1.我这个队列的front和back都是闭区间的 ...
随机推荐
- ASP.Net Core-依赖注入IoC
一.Ioc IoC全称Inverse of Control,控制反转. 类库和框架的不同之处在于,类库是实现某种单一功能的API,框架是针对一个任务把这些单一功能串联起来形成一个完整的流程,这个流程在 ...
- 给postfix设置黑名单
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- 对PostgreSQL的prepared statement的深入理解
看官方文档: http://www.postgresql.org/docs/current/static/sql-prepare.html PREPARE creates a prepared sta ...
- Java算法试题--猜字母/杀人游戏
题目例如以下: 把abcd-s共19个字母组成的序列反复拼接106次,得到长度为2014的串. 接下来删除第1个字母(即开头的字母a).以及第3个,第5个等全部奇数位置的字母. 得到的新串再进行删除奇 ...
- 理解class.forName()
使用jdbc方式连接数据库时会使用一句代码Class.forName(String className).这句话是什么意思呢?首先说一点Class.forName(String className)这 ...
- 优化 MySQL 中的分页
英文:Robert Eisele 译者:Giraffe 链接:http://yemengying.com/2016/05/28/optimized-pagiantion-mysql/ 一道面试的问题, ...
- wordpress迁移
从一个地方搬到另一个窝,我必定会带着我的Wordpress,这就涉及到博客的迁移了.首先申明,该文非原创,放在这里主要是为了方便自己日后再次需要转移博客时,能很快锁定文章目标. 这篇文章主要介绍怎样将 ...
- Eclipse 常用快捷键与使用技巧总结
一.实用类快捷键 1 常用熟悉的快捷键 CTRL+C(复制).CTRL+X(剪切).CTRL+Z(撤销).CTRL+F(查找).CTRL+H(搜索文件或字符串).CTRL+/(双斜杠注释).ALT+/ ...
- Database API
Database API Introduction Basic Usage Selects Joins Aggregates Raw Expressions Inserts Updates Delet ...
- iOS 网络编程:JSON解析
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...