题解

我们枚举建厂的位置,发现有个\(n^2\)的DP。随手搞个斜率优化到\(O(n)\)。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int maxn = 21000 ;
  5. const ll inf = 100000000000000LL;
  6. int n;
  7. ll f[maxn];
  8. ll w[maxn],s[maxn],m[maxn],h[maxn],cnt[maxn];
  9. ll d[maxn],wet[maxn];
  10. int q[maxn],l,r;
  11. ll calc(int j,int i) {
  12. //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];
  13. return s[n]-(h[i-1]-h[j-1])*d[j]-(h[n]-h[i-1])*d[i];
  14. }
  15. double slope(int a,int b) {
  16. double tmp1 = h[b-1]*d[b]-h[a-1]*d[a],tmp2=d[b]-d[a];
  17. return tmp1/tmp2;
  18. }
  19. int main() {
  20. //freopen("test.in","r",stdin);
  21. ios::sync_with_stdio(false);
  22. cin.tie(0);cout.tie(0);
  23. cin>>n;
  24. for(int i = n;i;--i) cin>>wet[i]>>d[i];
  25. for(int i = 1;i<=n;++i) {
  26. d[i]+=d[i-1];
  27. h[i]=h[i-1]+wet[i];
  28. s[i]=s[i-1]+wet[i]*d[i];
  29. }
  30. ll ans = inf;
  31. l=r=0;
  32. for(int i = 1;i<=n;++i) {
  33. while(l<r&&slope(q[l],q[l+1])<=h[i-1]) ++l;
  34. int j = q[l];
  35. f[i]=calc(j,i);
  36. ans=min(ans,f[i]);
  37. while(l<r&&slope(q[r-1],q[r])>=slope(q[r],i)) --r;
  38. q[++r]=i;
  39. }
  40. cout<<ans<<endl;
  41. return 0;
  42. }

【文文殿下】[CEOI2004]锯木厂选址 题解的更多相关文章

  1. luoguP4360 [CEOI2004]锯木厂选址

    题目链接 luoguP4360 [CEOI2004]锯木厂选址 题解 dis:后缀和 sum:前缀和 补集转化,减去少走的,得到转移方程 dp[i] = min(tot - sumj * disj - ...

  2. P4360 [CEOI2004]锯木厂选址

    P4360 [CEOI2004]锯木厂选址 这™连dp都不是 \(f_i\)表示第二个锯木厂设在\(i\)的最小代价 枚举1号锯木厂 \(f_i=min_{0<=j<i}(\sum_{i= ...

  3. 动态规划(斜率优化):[CEOI2004]锯木厂选址

    锯木场选址(CEOI2004) 从山顶上到山底下沿着一条直线种植了n棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能按照一个方向运输:朝山下运.山脚下有 ...

  4. [BZOJ2684][CEOI2004]锯木厂选址

    BZOJ权限题! Description 从山顶上到山底下沿着一条直线种植了n棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能按照一个方向运输:朝山下运 ...

  5. LG4360 [CEOI2004]锯木厂选址

    题意 原题来自:CEOI 2004 从山顶上到山底下沿着一条直线种植了 n 棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能朝山下运.山脚下有一个锯木厂 ...

  6. cogs 362. [CEOI2004]锯木厂选址

    ★★★   输入文件:two.in   输出文件:two.out   简单对比 时间限制:0.1 s   内存限制:32 MB 从山顶上到山底下沿着一条直线种植了n棵老树.当地的政府决定把他们砍下来. ...

  7. 2018.08.28 洛谷P4360 [CEOI2004]锯木厂选址(斜率优化dp)

    传送门 一道斜率优化dp入门题. 是这样的没错... 我们用dis[i]表示i到第三个锯木厂的距离,sum[i]表示前i棵树的总重量,w[i]为第i棵树的重量,于是发现如果令第一个锯木厂地址为i,第二 ...

  8. 洛谷P4360 [CEOI2004]锯木厂选址(斜率优化)

    传送门 我可能根本就没有学过斜率优化…… 我们设$dis[i]$表示第$i$棵树到山脚的距离,$sum[i]$表示$w$的前缀和,$tot$表示所有树运到山脚所需要的花费,$dp[i]$表示将第二个锯 ...

  9. 【题解】[CEOI2004]锯木厂选址

    Link \(\text{Solution:}\) 注意到题目中的编号是倒着的,于是我们的距离要预处理的是后缀和. 考虑如何\(n^2\)搞: 设\(dp[i]\)表示选择\(i\)为第二个中转点的最 ...

随机推荐

  1. python包与模块导入

    一 .module 通常模块为一个文件,直接使用import来导入就好了.可以作为module的文件类型有".py".".pyo".".pyc&quo ...

  2. 【Linux】DNS服务-BIND基础配置(二)

    BIND简介 现在使用最为广泛的DNS服务器软件是BIND(Berkeley Internet Name Domain),最早有伯克利大学的一名学生编写,现在最新的版本是9,有ISC(Internet ...

  3. 查看Android应用所需权限(uses-permission)

    http://www.tuicool.com/articles/zq2meq MainActivity如下: package cc.testusespermission; import android ...

  4. ServiceDesk Plus更有序地组织IT项目

  5. input.file样式修改

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. keras框架的MLP手写数字识别MNIST,梳理?

    keras框架的MLP手写数字识别MNIST 代码: # coding: utf-8 # In[1]: import numpy as np import pandas as pd from kera ...

  7. 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 , = ...

  8. Python开课复习7

    操作系统 操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来. #1. 打开文 ...

  9. flex 布局 计算器

    flex布局计算器 <!doctype html> <html> <head> <style> .box{ display: flex; flex-di ...

  10. poj 1094 Sorting It All Out 拓补排序

    Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...