传送门

终究还是通宵了啊。。。

这是一道简单的斜率优化dp。

先对所有土地排序,显然如果有严格小于的两块土地不用考虑小的一块。

于是剩下的土地有一条边单增,另外一条单减。

我们假设a[i]是单减的,b[i]是单增的。

f[i]=min(f[j]+a[j+1]∗b[i])" role="presentation" style="position: relative;">f[i]=min(f[j]+a[j+1]∗b[i])f[i]=min(f[j]+a[j+1]∗b[i])

对于两个决策k1&lt;k2" role="presentation" style="position: relative;">k1<k2k1<k2,如果k2优于k1,那么:

f[k1]−f[k2]&gt;b[i]∗(a[k2+1]−a[k1+1])" role="presentation" style="position: relative;">f[k1]−f[k2]>b[i]∗(a[k2+1]−a[k1+1])f[k1]−f[k2]>b[i]∗(a[k2+1]−a[k1+1])

注意a是单减的除过去要变号。

<=>slope&lt;b[i]" role="presentation" style="position: relative;">slope<b[i]slope<b[i]

于是可以斜率优化了。

代码:

#include<bits/stdc++.h>
#define N 50005
#define ll long long
using namespace std;
inline ll read(){
    ll ans=0;
    char ch=getchar();
    while(!isdigit(ch))ch=getchar();
    while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
    return ans;
}
int n,tot=0,hd,tl,q[N];
ll f[N];
struct Node{ll a,b;}p_[N],p[N];
inline bool cmp(Node a,Node b){return a.a==b.a?a.b>b.b:a.a>b.a;}
inline double slope(int i,int j){return (f[i]-f[j])*1.0/(p[j+1].a-p[i+1].a);}
int main(){
    n=read(),hd=tl=1;
    for(int i=1;i<=n;++i)p_[i].a=read(),p_[i].b=read();
    sort(p_+1,p_+n+1,cmp);
    for(int i=1;i<=n;++i)if(tot==0||p_[i].b>p[tot].b)p[++tot]=p_[i];
    for(int i=1;i<=tot;++i){
        while(hd<tl&&slope(q[hd],q[hd+1])<p[i].b)++hd;
        int j=q[hd];
        f[i]=f[j]+p[i].b*p[j+1].a;
        while(hd<tl&&slope(q[tl],i)<slope(q[tl-1],q[tl]))--tl;
        q[++tl]=i;
    }
    cout<<f[tot];
    return 0;
}

最新文章

  1. AJAX部分---php-jquery-ajax;
  2. docker中使用systemd
  3. Asp.Net生命周期系列六
  4. HTML5表单内元素的required属性
  5. 更改Zend Studio/Eclipse代码风格主题
  6. linux修改文本模式下的分辨率(CentOS6.4)
  7. [Swust OJ 188]--异面空间(读懂题意很重要)
  8. Java对象序列化/反序列化的注意事项
  9. 将CSS放头部,JS放底部,可以提高页面的性能的原因
  10. C# 根据出生日期(年月日)计算年龄的代码
  11. Recursion之Demo
  12. 监控elssticSearch健康状态
  13. mac java_home等系统参数配置
  14. MATLAB小波包的分解与重构
  15. 阿里云CentOS Linux服务器上搭建邮件服务器遇到的问题
  16. 用户密码管理和 su 命令
  17. Java枚举的小用法
  18. 【BZOJ】【2738】&amp;【Tsinsen】【A1333】矩阵乘法
  19. 【WPF】对话框/消息弹窗
  20. CentOS中Ctrl+Z、Ctrl+C、Ctrl+D的区别

热门文章

  1. linux 关于数据库的部分命令
  2. AS3获取对象类名,getDefinitionByName,getQualifiedClassName,getQualifiedSuperclassName
  3. 通过beego快速创建一个Restful风格API项目及API文档自动化(转)
  4. 推荐的 MongoDB 安装文档
  5. DELL服务器iDRAC相关设置
  6. Status Code:405 Method Not Allowed
  7. function方法控制是否隐藏部分内容
  8. sshd_config优化
  9. springmvc DispatchServlet初始化九大加载策略(一)
  10. obstacle