传送门

我可能根本就没有学过斜率优化……

我们设$dis[i]$表示第$i$棵树到山脚的距离,$sum[i]$表示$w$的前缀和,$tot$表示所有树运到山脚所需要的花费,$dp[i]$表示将第二个锯木厂建在$i$的最小花费

那么状态转移方程就是$$dp[i]=min\{tot-dis[j]*sum[j]-dis[i]*(sum[j]-sum[i])\}$$

然后考虑斜率优化,设$j$比$k$更优,则(一堆乱七八糟的推导之后)有$$\frac{sum[j]*dis[j]-sum[k]-dis[k]}{sum[j]-sum[k]}>dis[i]$$

那么只要考虑维护一个上凸包就可以了

 //minamoto
#include<iostream>
#include<cstdio>
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,:;}
inline int read(){
#define num ch-'0'
char ch;bool flag=;int res;
while(!isdigit(ch=getc()))
(ch=='-')&&(flag=true);
for(res=num;isdigit(ch=getc());res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
const int N=;
int sum[N],dis[N],w[N],q[N],dp[N],n,h,t,tot,ans=0x3f3f3f3f;
inline double slope(int j,int k){
return ((sum[j]*dis[j])-(sum[k]*dis[k]))*1.0/(sum[j]-sum[k]);
}
inline int calc(int i,int j){
return tot-sum[j]*dis[j]-dis[i]*(sum[i]-sum[j]);
}
int main(){
//freopen("testdata.in","r",stdin);
n=read();
for(int i=;i<=n;++i) w[i]=read(),dis[i]=read();
for(int i=n;i;--i) dis[i]+=dis[i+];
for(int i=;i<=n;++i) sum[i]=sum[i-]+w[i],tot+=w[i]*dis[i];
for(int i=;i<=n;++i){
while(h<t&&slope(q[h],q[h+])>dis[i]) ++h;
cmin(ans,calc(i,q[h]));
while(h<t&&slope(q[t],q[t-])<slope(q[t-],i)) --t;q[++t]=i;
}
printf("%d\n",ans);
return ;
}

最新文章

  1. Maven个人手册
  2. 远程实时调试手机上的Web页面
  3. 今天来做一个PHP电影小爬虫。
  4. Cache的Add之委托解说
  5. js基础 - 兼容代码
  6. Nutch配置
  7. asp.net内置对象session和cookie
  8. AndroidContentProvider ContentResolver和ContentObserver的使用
  9. Lock与synchronized 的区别
  10. Oracle教程-常用命令(二)
  11. linux管道(|)与重定向(&lt;&gt;)的异同
  12. flask配置管理
  13. Oracle 11g数据库安装和卸载教程
  14. 用js来实现那些数据结构08(链表02-双向链表)
  15. PMP知识点(六)&mdash;&mdash;项目经理权利类型
  16. main方法启动spring
  17. https协议详解
  18. nodejs:导出Excel和解析导入的Excel
  19. mysql 不允许分组的问题
  20. VBscript实现开机自动启动,自动复制原件后启动

热门文章

  1. DotNetBar笔记
  2. Nunit 2.6 无法调试.Net Framework 4.0
  3. 【转】LTE 全过程流程
  4. demo2 Kafka+Spark Streaming+Redis实时计算整合实践 foreachRDD输出到redis
  5. Java-API-Package:org.springframework.stereotype
  6. Excel开发学习笔记:读取xml文件及csv文件
  7. pl/sql对excel数据的导入和导出
  8. mybatis中in查询
  9. python爬虫框架(1)--框架概述
  10. if __name__ == &quot;__main__&quot;: 的使用