dp专辑 T - MAX Average Problem [ 斜率优化]
来源:互联网 发布:端口被占用如何释放 编辑:程序博客网 时间:2024/05/22 15:27
做了这题才发现和2011百度之星 初赛B C题 园艺布置 大概是一样的题目
题意:
给你一段数列, 求其长度不小于 K 的平均值最大的子序列。
分析:
令 F(i) 为以第 i 个数为结尾的列的最大平均值,可以写出DP方程:F(i) = max{[sum(i) - sum(j)] / (i - j)} (j < i, i - j >= k)就是
求水平距离大于等于 K 的两点,使其连线的斜率最大。
可以证明,i 的决策集合中的点,一定构成一个下凸折线;而 i 的最优决策,一定是点 (i, sum(i)) 与折线的切点。
资料见下:浅谈数形结合思想在信息学竞赛中的应用
//AC CODE:
#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int N = 100005;int n, k;long long sum[N];long long a[N];struct Point{ int x, y; Point () {} Point (int X, int Y) { x = X; y = Y; }} Q[N];long long get(){ char c; long long ret; while (c=getchar(),c<'0'||c>'9');//处理非数值部分 ret=c-'0';//输入的第一个数据的首位 while (c=getchar(),c>='0'&&c<='9') ret=ret*10+c-'0'; return ret;}inline int multi(Point p1, Point p2, Point p0){//求矢量P[p0, p1], Q[p0, p2]的叉积//p0是顶点//叉积的一个非常重要性质是可以通过它的符号判断两矢量相互之间的顺逆时针关系://若 P × Q > 0 , 则P在Q的逆时针方向//若 P × Q < 0 , 则P在Q的顺时针方向//若 P × Q = 0 , 则P与Q共线,但可能同向也可能反向 return (p1.x - p0.x) * (p2.y - p0.y) - (p2.x - p0.x) * (p1.y - p0.y);}int main(){ int i; while (scanf("%d %d", &n, &k) != EOF) { double ans = 0.0; for (i = 1; i <= n; i++) { a[i] = get(); sum[i] = sum[i - 1] + a[i]; } int f = 0, r = 0; for (i = k; i <= n; i++) { Point now = Point(i - k, sum[i - k]); while (r - f >= 2 && multi(Q[r - 1], now, Q[r - 2]) <= 0)// r--; Q[r++] = now; //(sum[i] - Q[f].y)/(i - Q[f].x) <= (sum[i] - Q[f + 1].y)/(i - Q[f + 1].x) while (r - f >= 2 && (sum[i] - Q[f].y) * (i - Q[f + 1].x) <= (sum[i] - Q[f + 1].y) * (i - Q[f].x)) f++; ans = max(ans, double(sum[i] - Q[f].y) / double(i - Q[f].x)); } printf("%.2lf\n", ans); }}
- dp专辑 T - MAX Average Problem [ 斜率优化]
- 【DP+斜率优化】 hdu2993 MAX Average Problem
- HDU MAX Average Problem(斜率优化DP)
- HDU 2993 MAX Average Problem【斜率优化dp】
- hdu 2993 MAX Average Problem(DP+斜率优化入门题)
- HDU 2993 MAX Average Problem(斜率优化DP)
- hdu 2993 MAX Average Problem(DP+斜率优化)
- HDU2993——MAX Average Problem(斜率优化DP)
- hdu 2993 MAX Average Problem 斜率优化DP
- hdu 2993 MAX Average Problem (斜率优化dp入门)
- hdu 2993 MAX Average Problem (dp斜率优化)
- hdoj MAX Average Problem 2993 (斜率优化DP)
- hdu2993 MAX Average Problem (斜率dp)
- HDU2993 MAX average problem [斜率dp]
- hdu 2993 MAX Average Problem(斜率dp)
- HDU 2993 MAX Average Problem 斜率优化
- [HDU2993] MAX Average Problem && 斜率优化问题
- HDU 2993 MAX Average Problem (斜率优化)
- 设计模式C++实现(2)——策略模式
- gittutorial - A tutorial introduction to git (for version 1.5.1 or newer)
- dp专辑 H - 炮兵阵地 [ 状态压缩]
- 设计模式C++实现(3)——适配器模式
- 设计模式C++实现(4)——单例模式
- dp专辑 T - MAX Average Problem [ 斜率优化]
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(6)——建造者模式
- 短信及彩信的删除
- 多域名解析同一IP访问虚拟主机不同目录(转)
- 设计模式C++实现(7)——外观模式、组合模式
- 设计模式C++实现(8)——代理模式
- 设计模式C++实现(9)——享元模式
- window.opener用法