什么是斜率dp呢 大概就把一些单调的分组问题 从O(N^2)降到O(N) 具体的话我就不多说了 看论文:

http://www.cnblogs.com/ka200812/archive/2012/08/03/2621345.html

我自己也补充几句:

其实斜率dp有很多种打法 有凸包 有截距 有直接比较斜率的 因为我比较弱 所以的话就学最弱智的比较斜率的 听wph说截距很好理解

然后的话 讲课的时候scy说什么要证单调性什么鬼的 我在学的过程中好像没遇到就不管了 虽然我很弱 反正我能AC就行了

我们要知道的一点是我们要维护的是斜率递增还是递减的 这很重要 然后还要知道什么时候左边端点优 什么时候右边端点优

我做这种题就是 先枚举k<j<i 然后列出式子化简 变成(.....) / (.....)  < 或者 > x[i] 然后设两条斜率为g[i,j] g[j,k]

看看g[i,j]<g[j,k] 或者 g[i,j]>g[j,k]的情况 看看有没有使j最不优的情况删掉j 然后描出这个队列里面合法的点 就知道是单调递增还是递减了

其实我说的很乱 别看好了 直接上例题

[Usaco2008 Mar]土地购买

首先这一道题是求max的 我们自然要办法处理一下 先按x和y从小到大排序 我们发现 当i>j xi>xj yi>yj的时候 j是废的 所以我们要重新搞一遍 使得xi>xj yi<yj

这样就变成了x递增y递减的东西

然后斜率dp搞一下就好了 注意如果没删去那些没用的直接搞会错的 因为如果假设i>j i对于j来说j是废的 那么的话F[i]就是继承F[j] 就是把i和j分成两组 然后的话j又比j-1优(会有可能的好像我想了一下) 所以的话就继承了j的使原来不优 但是的话j-1不优是因为Y[j-1+1]的影响了 (想一下 我就因为这个wa了)

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<climits>
#define Maxn 50010
using namespace std;
pair<double,double>pr[Maxn]; int N;
bool Cmp(const pair<double,double> &x,const pair<double,double> &y){if(x.first!=y.first) return x.first<y.first; return x.second<y.second;}
pair<double,double>S[Maxn]; int top=; int Q[Maxn],head,tail; double F[Maxn];
inline double Slop(int j,int k){return (F[j]-F[k])/(S[k+].second-S[j+].second);}
int main()
{
scanf("%d",&N); for(int i=;i<=N;i++) scanf("%lf%lf",&pr[i].first,&pr[i].second);
sort(pr+,pr+N+,Cmp); S[]=make_pair(,LLONG_MAX);
for(int i=;i<=N;i++){while(pr[i].second>=S[top].second) top--; S[++top]=pr[i];}
head=; tail=; Q[head]=;
for(int i=;i<=top;i++)
{
while(head<tail&&Slop(Q[head],Q[head+])<=S[i].first) head++;
F[i]=F[Q[head]]+S[i].first*S[Q[head]+].second;
while(head<tail&&Slop(Q[tail-],Q[tail])>=Slop(Q[tail],i)) tail--; Q[++tail]=i;
}
return printf("%.0lf\n",F[top]),;
}
/*
4
100 1
15 15
20 5
1 100
1<=N<=50000
*/

[DP优化方法之斜率DP]的更多相关文章

  1. DP 优化方法大杂烩 & 做题记录 I.

    标 * 的是推荐阅读的部分 / 做的题目. 1. 动态 DP(DDP)算法简介 动态动态规划. 以 P4719 为例讲一讲 ddp: 1.1. 树剖解法 如果没有修改操作,那么可以设计出 DP 方案 ...

  2. DP 优化方法合集

    0. 前言 写完这篇文章后发现自己对于 DP 的优化一窍不通,所以补了补 DP 的一些优化,写篇 blog 总结一下. 1. 单调队列/单调栈优化 1.2 算法介绍 这应该算是最基础的 DP 优化方法 ...

  3. [总结]一些 DP 优化方法

    目录 注意本文未完结 写在前面 矩阵快速幂优化 前缀和优化 two-pointer 优化 决策单调性对一类 1D/1D DP 的优化 \(w(i,j)\) 只含 \(i\) 和 \(j\) 的项--单 ...

  4. [DP优化方法之虚树]

    首先我们看一篇文章 转自xyz: 给出一棵树. 每次询问选择一些点,求一些东西.这些东西的特点是,许多未选择的点可以通过某种方式剔除而不影响最终结果. 于是就有了建虚树这个技巧..... 我们可以用l ...

  5. dp常见优化方法

    noip范围内的dp优化方法: 加速状态转移 1.前缀和优化 2.单调队列优化 3.线段树或树状数组优化 精简状态 3:精简状态往往是通过对题目本身性质的分析,去省掉一些冗余的状态.相对以上三条套路性 ...

  6. Slope Trick:解决一类凸代价函数DP优化

    [前言] 在补Codeforce的DP时遇到一个比较新颖的题,然后在知乎上刚好 hycc 桑也写了这道题的相关题解,这里是作为学习并引用博客的部分内容 这道题追根溯源发现2016年这个算法已经在API ...

  7. DP 优化小技巧

    收录一些比较冷门的 DP 优化方法. 1. 树上依赖性背包 树上依赖性背包形如在树上选出若干个物品做背包问题,满足这些物品连通.由于 01 背包,多重背包和完全背包均可以在 \(\mathcal{O} ...

  8. dp优化

    入口 A(fzu 1894) 普通的单调队列,trick是进队判断的符号选取(>=wa , >ac). B(poj 2823) 没什么好说的 ,坑爹poj g++,tle ;c++,ac. ...

  9. 常见的DP优化类型

    常见的DP优化类型 1单调队列直接优化 如果a[i]单调增的话,显然可以用减单调队列直接存f[j]进行优化. 2斜率不等式 即实现转移方程中的i,j分离.b单调减,a单调增(可选). 令: 在队首,如 ...

随机推荐

  1. VS2012 Unit Test

    VS2012 Unit Test 个人学习汇总(含目录) 首先,给出MSDN相关地址:http://msdn.microsoft.com/en-us/library/Microsoft.VisualS ...

  2. [RM 状态机详解1] RMApp状态机详解

    概述 Apache Hadoop 2.0在Hadoop 1.0基础上做了许多的重构工作,代码上的重构最大的变化在于引入状态机处理各个角色的状态与变迁,使用状态机是得代码结构更加清晰,方便异步处理各种操 ...

  3. 线性回归,logistic回归和一般回归

    1 摘要 本报告是在学习斯坦福大学机器学习课程前四节加上配套的讲义后的总结与认识.前四节主要讲述了回归问题,回归属于有监督学习中的一种方法.该方法的核心思想是从连续型统计数据中得到数学模型,然后将该数 ...

  4. IceMx.Mvc 我的js MVC 框架六、完善植物大战僵尸(向日葵登场)

    有图有真相,废话不多说上图 看到园友的支持很受鼓舞,更觉得应该做下去,虽然自己是个菜鸟,但也应该共享自己的心得,只要有人获益那就是值得的. 我的下载需要csdn论坛的1个积分,之所以不完全免费出去是因 ...

  5. 最受欢迎的Web开发工具

    1)WebBuilderWebBuilder是一款开源的可视化Web应用开发和运行平台.基于浏览器的集成开发环境,可视化和智能化的设计,能轻松完成常规应用和面向手机的移动应用开发:高效.稳定和可扩展的 ...

  6. SVN Access to '/svn/Test/!svn/me' forbidden,不能更新解决办法

    从之前的电脑将Repositorise复制到现在用的PC,出现可以checkout但是不能update的问题.在网上找到以下解决方法,均未能解决. 1.确认URL跟实际一致: 2.确认用户名密码正确: ...

  7. Java-继承的应用

    class array {  private int[] temp;  private int foot;  public array(int len)   //为temp数组规定大小,并开辟空间,申 ...

  8. CF 322B Ciel and Flowers 贪心水题

    B. Ciel and Flowers time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. gcc与g++的区别与联系

    gcc和g++都是GNU(组织)的编译器. 一.误区详解 误区一:gcc只能编译c代码,g++只能编译c++代码 两者都可以,但是请注意: 1.后缀为.c的文件,   gcc把它当作是C程序,而g++ ...

  10. 用Bottle开发web程序(二)

    返回码 在开发web程序时,除了一些服务器错误等,常常需要自定义返回码,以便告诉用户处理请求的结果或者状态.bottle支持自定义的返回码,可以通过以下几种方式进行实现. abort 在bottle中 ...