【文文殿下】[CEOI2004]锯木厂选址 题解
题解
我们枚举建厂的位置,发现有个\(n^2\)的DP。随手搞个斜率优化到\(O(n)\)。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 21000 ;
const ll inf = 100000000000000LL;
int n;
ll f[maxn];
ll w[maxn],s[maxn],m[maxn],h[maxn],cnt[maxn];
ll d[maxn],wet[maxn];
int q[maxn],l,r;
ll calc(int j,int i) {
//return s[j-1]+s[i-1]-s[j]-(h[i-1]-h[j])*d[j]+s[n]-s[i]-(h[n]-h[i])*d[i];
return s[n]-(h[i-1]-h[j-1])*d[j]-(h[n]-h[i-1])*d[i];
}
double slope(int a,int b) {
double tmp1 = h[b-1]*d[b]-h[a-1]*d[a],tmp2=d[b]-d[a];
return tmp1/tmp2;
}
int main() {
//freopen("test.in","r",stdin);
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n;
for(int i = n;i;--i) cin>>wet[i]>>d[i];
for(int i = 1;i<=n;++i) {
d[i]+=d[i-1];
h[i]=h[i-1]+wet[i];
s[i]=s[i-1]+wet[i]*d[i];
}
ll ans = inf;
l=r=0;
for(int i = 1;i<=n;++i) {
while(l<r&&slope(q[l],q[l+1])<=h[i-1]) ++l;
int j = q[l];
f[i]=calc(j,i);
ans=min(ans,f[i]);
while(l<r&&slope(q[r-1],q[r])>=slope(q[r],i)) --r;
q[++r]=i;
}
cout<<ans<<endl;
return 0;
}
【文文殿下】[CEOI2004]锯木厂选址 题解的更多相关文章
- luoguP4360 [CEOI2004]锯木厂选址
题目链接 luoguP4360 [CEOI2004]锯木厂选址 题解 dis:后缀和 sum:前缀和 补集转化,减去少走的,得到转移方程 dp[i] = min(tot - sumj * disj - ...
- P4360 [CEOI2004]锯木厂选址
P4360 [CEOI2004]锯木厂选址 这™连dp都不是 \(f_i\)表示第二个锯木厂设在\(i\)的最小代价 枚举1号锯木厂 \(f_i=min_{0<=j<i}(\sum_{i= ...
- 动态规划(斜率优化):[CEOI2004]锯木厂选址
锯木场选址(CEOI2004) 从山顶上到山底下沿着一条直线种植了n棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能按照一个方向运输:朝山下运.山脚下有 ...
- [BZOJ2684][CEOI2004]锯木厂选址
BZOJ权限题! Description 从山顶上到山底下沿着一条直线种植了n棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能按照一个方向运输:朝山下运 ...
- LG4360 [CEOI2004]锯木厂选址
题意 原题来自:CEOI 2004 从山顶上到山底下沿着一条直线种植了 n 棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能朝山下运.山脚下有一个锯木厂 ...
- cogs 362. [CEOI2004]锯木厂选址
★★★ 输入文件:two.in 输出文件:two.out 简单对比 时间限制:0.1 s 内存限制:32 MB 从山顶上到山底下沿着一条直线种植了n棵老树.当地的政府决定把他们砍下来. ...
- 2018.08.28 洛谷P4360 [CEOI2004]锯木厂选址(斜率优化dp)
传送门 一道斜率优化dp入门题. 是这样的没错... 我们用dis[i]表示i到第三个锯木厂的距离,sum[i]表示前i棵树的总重量,w[i]为第i棵树的重量,于是发现如果令第一个锯木厂地址为i,第二 ...
- 洛谷P4360 [CEOI2004]锯木厂选址(斜率优化)
传送门 我可能根本就没有学过斜率优化…… 我们设$dis[i]$表示第$i$棵树到山脚的距离,$sum[i]$表示$w$的前缀和,$tot$表示所有树运到山脚所需要的花费,$dp[i]$表示将第二个锯 ...
- 【题解】[CEOI2004]锯木厂选址
Link \(\text{Solution:}\) 注意到题目中的编号是倒着的,于是我们的距离要预处理的是后缀和. 考虑如何\(n^2\)搞: 设\(dp[i]\)表示选择\(i\)为第二个中转点的最 ...
随机推荐
- python包与模块导入
一 .module 通常模块为一个文件,直接使用import来导入就好了.可以作为module的文件类型有".py".".pyo".".pyc&quo ...
- 【Linux】DNS服务-BIND基础配置(二)
BIND简介 现在使用最为广泛的DNS服务器软件是BIND(Berkeley Internet Name Domain),最早有伯克利大学的一名学生编写,现在最新的版本是9,有ISC(Internet ...
- 查看Android应用所需权限(uses-permission)
http://www.tuicool.com/articles/zq2meq MainActivity如下: package cc.testusespermission; import android ...
- ServiceDesk Plus更有序地组织IT项目
- input.file样式修改
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- keras框架的MLP手写数字识别MNIST,梳理?
keras框架的MLP手写数字识别MNIST 代码: # coding: utf-8 # In[1]: import numpy as np import pandas as pd from kera ...
- day10作业—(闭包迭代器递归)
补充:一个星号的 打散和聚合 a, b , *c = [1,2, 1,4] print( a , b , *c) #1 2 1 4 print(a, b, c) #1 2 [1, 4] *c , = ...
- Python开课复习7
操作系统 操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来. #1. 打开文 ...
- flex 布局 计算器
flex布局计算器 <!doctype html> <html> <head> <style> .box{ display: flex; flex-di ...
- poj 1094 Sorting It All Out 拓补排序
Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...