cogs 362. [CEOI2004]锯木厂选址】的更多相关文章

★★★   输入文件:two.in   输出文件:two.out   简单对比 时间限制:0.1 s   内存限制:32 MB 从山顶上到山底下沿着一条直线种植了n棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂.木材只能按照一个方向运输:朝山下运.山脚下有一个锯木厂.另外两个锯木厂将新修建在山路上.你必须决定在哪里修建两个锯木厂,使得传输的费用总和最小.假定运输每公斤木材每米需要一分钱. 输入 输入的第一行为一个正整数n——树的个数(2≤n≤20 000).…
P4360 [CEOI2004]锯木厂选址 这™连dp都不是 \(f_i\)表示第二个锯木厂设在\(i\)的最小代价 枚举1号锯木厂 \(f_i=min_{0<=j<i}(\sum_{i=1}^{n}w_id_i-D_jW_j-D_iW_i+D_iW_j)\) D为距离后缀和,W为重量前缀和 \(f_i=min_{0<=j<i}(D_iW_j-D_jW_j)+\sum_{i=1}^{n}w_id_i-D_iW_i\) \(X=D_i,K=W_j,B=-D_jW_j\) // It…
题目链接 luoguP4360 [CEOI2004]锯木厂选址 题解 dis:后缀和 sum:前缀和 补集转化,减去少走的,得到转移方程 dp[i] = min(tot - sumj * disj - (sumi - sumj) * disi 不需要斜率优化吧?反正也是个SB式子 代码 #include<bits/stdc++.h> using namespace std; inline int read() { int x = 0,f = 1; char c = getchar(); whi…
锯木场选址(CEOI2004) 从山顶上到山底下沿着一条直线种植了n棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能按照一个方向运输:朝山下运.山脚下有一个锯木厂.另外两个锯木厂将新修建在山路上.你必须决定在哪里修建两个锯木厂,使得传输的费用总和最小.假定运输每公斤木材每米需要一分钱. 任务 你的任务是写一个程序: 从标准输入读入树的个数和他们的重量与位置 计算最小运输费用 将计算结果输出到标准输出 输入 输入的第一行为一个正整数n——树的个数(2…
BZOJ权限题! Description 从山顶上到山底下沿着一条直线种植了n棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能按照一个方向运输:朝山下运.山脚下有一个锯木厂.另外两个锯木厂将新修建在山路上.你必须决定在哪里修建两个锯木厂,使得传输的费用总和最小.假定运输每公斤木材每米需要一分钱. Input 输入的第一行为一个正整数n--树的个数(2≤n≤20 000).树从山顶到山脚按照1,2--n标号.接下来n行,每行有两个正整数(用空格分开)…
传送门 一道斜率优化dp入门题. 是这样的没错... 我们用dis[i]表示i到第三个锯木厂的距离,sum[i]表示前i棵树的总重量,w[i]为第i棵树的重量,于是发现如果令第一个锯木厂地址为i,第二个地址为j,则有 total=[∑i=1ndis[i]∗w[i]]−dis[i]∗w[i]−dis[j]∗(sum[j]−sum[i])" role="presentation" style="position: relative;">total=[∑n…
题意 原题来自:CEOI 2004 从山顶上到山底下沿着一条直线种植了 n 棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能朝山下运.山脚下有一个锯木厂.另外两个锯木厂将新修建在山路上.你必须决定在哪里修建这两个锯木厂,使得运输的费用总和最小.假定运输每公斤木材每米需要一分钱. 你的任务是编写一个程序,读入树的个数和他们的重量与位置,计算最小运输费用. \(n \leq 2 \times 10^5\) 分析 参照TimeTraveller的题解.这…
传送门 我可能根本就没有学过斜率优化…… 我们设$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…
斜率优化dp板子题[迫真] 这里从下往上标记\(1-n\)号点 记\(a_i\)表示前缀\(i\)里面树木的总重量,\(l_i\)表示\(i\)到最下面的距离,\(s_i\)表示\(1\)到\(i-1\)号树运到最下面的代价(就是下面那个伐木厂产生的代价),\(f_i\)表示上面那个伐木厂在\(i\),\(1\)到\(i-1\)号树产生的代价 我们可以用脚列出式子\[f_i=min(s_j+(s_i-s_{j+1})-l_j(a_{i-1}-a_j))\] 就是下面那个伐木厂产生的代价\(s_j…
斜率优化DP 先考虑朴素DP方程, f[i][k]代表第k个厂建在i棵树那里的最小代价,最后答案为f[n+1][3]; f[i][k]=min(f[j][k-1] + 把j+1~i的树都运到i的代价) 首先注意到“把j+1~i的树都运到i的代价”不太方便表达,每次都暴力计算显然是无法承受的, 于是考虑前缀和优化,观察到先运到下一棵树那里,等一会再运下去,和直接运下去是等效的. 设sum[i]代表1 ~ i的树都运到i的代价, 于是根据前缀和思想,猜想我们可以用1 ~ r 的代价与 1 ~ l-1…
qwq 我感觉这都已经不算是斜率优化\(dp\)了,感觉更像是qwq一个\(下凸壳优化\)转移递推式子. qwq 首先我们先定义几个数组 \(sw[i]\)表示\(w[i]\)的前缀和 \(val[i] = w[i]\times d[i]\) \(sum[i]\)表示\(val[i]\)的前缀和. \(dis[i]\)表示\(i\)到山脚下的距离 \(f[i]\)表示在\(i\)建第一个厂的最小代价. 一个比较容易发现的性质是,厂一定是建在老树的点上. 因为考虑我们在假设我们现在在一个非老树的点…
斜率优化 # include <stdio.h> # include <stdlib.h> # include <iostream> # include <string.h> # include <algorithm> # define IL inline # define RG register # define Fill(a, b) memset(a, b, sizeof(a)) using namespace std; typedef lo…
题解 我们枚举建厂的位置,发现有个\(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],…
题意 题目链接 Sol 枚举第二个球放的位置,用前缀和推一波之后发现可以斜率优化 // luogu-judger-enable-o2 #include<bits/stdc++.h> #define Pair pair<int, int> #define MP(x, y) make_pair(x, y) #define fi first #define se second #define int long long #define LL long long #define Fin(x…
link 试题分析 做这种题就应该去先写个暴力代码 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> using namespace std; inline int read(){ ,ans=;char c=getchar(); ;c=getchar();} +c-';c=getchar();} return f*…
题目链接 一开始我的\(dp\)方程列错了,其实也不能说列错了,毕竟我交上去还是把暴力的分都拿到了,只是和题解的不一样,然后搞半天没搞出来去看题解,又看不懂,对不上,原来状态设置不一样自闭了. \(f[i]=all-sum[j]*dis[j]-(sum[i]-sum[j])*dis[i]\) \(f[i]=all-sum[j]*dis[j]-sum[i]*dis[i]+sum[j]*dis[i]\) \(sum[j]*dis[j]=dis[i]*sum[j]-sum[i]*dis[i]+all-…
Link \(\text{Solution:}\) 注意到题目中的编号是倒着的,于是我们的距离要预处理的是后缀和. 考虑如何\(n^2\)搞: 设\(dp[i]\)表示选择\(i\)为第二个中转点的最小代价. 枚举在\(i\)前面的\(j\),代价就是\(dp[i]=\min_{j<i}All-dis[j]*sum[j]-dis[i]*(sum[i]-sum[j])\) \(All\)是所有树木运输到\(1\)号点的代价.可以理解为,有一部分运输到\(j\)就不用运了,于是把这部分减掉.\(su…
[BZOJ2684][CEOI2004]锯木厂选址(斜率优化,动态规划) 题面 万恶的BZOJ因为权限题的原因而做不了... 我要良心的提供题面 Description 从山顶上到山底下沿着一条直线种植了n棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能按照一个方向运输:朝山下运.山脚下有一个锯木厂.另外两个锯木厂将新修建在山路上.你必须决定在哪里修建两个锯木厂,使得传输的费用总和最小.假定运输每公斤木材每米需要一分钱. Input 输入的第一行为…
[题目描述] 从山顶上到山底下沿着一条直线种植了n棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂.木材只能按照一个方向运输:朝山下运.山脚下有一个锯木厂.另外两个锯木厂将新修建在山路上.你必须决定在哪里修建两个锯木厂,使得传输的费用总和最小.假定运输每公斤木材每米需要一分钱. [输入描述] 输入的第一行为一个正整数n——树的个数(2≤n≤20 000).树从山顶到山脚按照1,2……n标号.接下来n行,每行有两个正整数(用空格分开).第i+1行含有:wi——第…
设: sw[i]为1..i的w之和 sd[i]为1到i的距离 cost[i]为把第一个锯木厂建在i带来的花费 all[i,j]为把i..j所有木头运到j所需要的花费 所以$all[i,j]=cost[j]-cost[i-1]-sw[i-1]*(sd[j]-sd[i-1])$ 我们设第2个锯木厂建在i所带来的最小花费为f[i],则$f[i]=min\{cost[j]+all[j+1,i]+all[j+1,n+1]\}$ 把all化掉,最终变成$f[i]=min\{cost[n+1]-sw[j]*(…
Description 从山顶上到山底下沿着一条直线种植了n棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂.木材只能按照一个方向运输:朝山下运.山脚下有一个锯木厂.另外两个锯木厂将新修建在山路上.你必须决定在哪里修建两个锯木厂,使得传输的费用总和最小.假定运输每公斤木材每米需要一分钱.任务你的任务是写一个程序:从标准输入读入树的个数和他们的重量与位置计算最小运输费用将计算结果输出到标准输出(2≤n≤20 000) Solution 设\(S[i]\)为重量前…
Description 题库链接 从山顶上到山底下沿着一条直线种植了 \(n\) 棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能朝山下运.山脚下有一个锯木厂.另外两个锯木厂将新修建在山路上.你必须决定在哪里修建这两个锯木厂,使得运输的费用总和最小.假定运输每公斤木材每米需要一分钱.询问计算最小运输费用. \(1\leq n\leq 20000\) Solution 记从山顶向下重量做一个前缀和为 \(w_i\),第 \(i\) 棵树到山底的距离为…
不想写什么详细的讲解了...而且也觉得自己很难写过某大佬(大米饼),于是建议把他的 blog 先看一遍,然后自己加了几道题目以及解析...顺便建议看看算法竞赛(蓝皮书)的 0x5A 斜率优化(P294) 部分 这是——大米饼大佬 看完了大米饼同志对斜率优化的介绍,下面我来稍微讲讲对斜率优化dp 的理解 前置知识 单调队列(栈) 平面直角坐标系 直线解析式 等式处理 dp状态设计 balabala...... 理解 其实斜率优化 dp 的原理很简单: 根据题目(斜率优化 dp 的题目一般都很裸)的…
前缀和优化 当DP过程中需要反复从一个求和式转移的话,可以先把它预处理一下.运算一般都要满足可减性. 比较naive就不展开了. 题目 [Todo]洛谷P2513 [HAOI2009]逆序对数列 [Done]洛谷P2511 [HAOI2008]木棍分割 [Done]洛谷P4099 [HEOI2013]SAO [Done]NOIAC37 染色 单调队列优化 前置技能:单调队列(经典的问题模型:洛谷P1886 滑动窗口) 用于优化形如\(f_i=\min/\max_{j=l_i}^{i-1}\{g_…
单调性优化DP Tags:动态规划 作业部落链接 一.概述 裸的DP过不了,怎么办? 通常会想到单调性优化 单调队列优化 斜率优化 决策单调性 二.题目 [x] 洛谷 P2120 [ZJOI2007]仓库建设 [x] 洛谷 P2900 [USACO08MAR]土地征用 [x] 洛谷 P3195 [HNOI2008]玩具装箱 [x] 洛谷 P3628 [APIO2010]特别行动队 [ ] 洛谷 P4360 [CEOI2004]锯木厂选址(留作复习) [x] 洛谷 P4072 [SDOI2016]…
前言 为了不久之后的\(NOIP2018\),我们的停课从今天(\(Oct\ 24th\))起正式开始了. 本来说要下周开始的,没想到竟提早了几天,真是一个惊喜.毕竟明天有语文考试.后天有科学考试,逃过了一劫. 这篇博客记录的便是停课这段时间的经历. 当然,这篇博客中有许多空链接,请谅解. \(Oct\ 24th\) 上午 一场\(NOIP2018\)线下模拟赛,\(AC\)了\(T1\)和\(T3\),\(T2\)悲惨爆\(0\)... .. 下午 花了一个下午写一道\(KD-Tree\)板子…
HDU3507 Print Article Zero has an old printer that doesn't work well sometimes. As it is antique, he still like to use it to print articles. But it is too old to work for a long time and it will certainly wear and tear, so Zero use a cost to evaluate…
参考资料: 李煜东<算法竞赛进阶指南> 斜率优化 形如: \(f[i] = min\{f[j]+val(i,j)\}\)的dp,多项式\(val(i,j)\)包含\(i,j\)的乘积项 引入一个例题: [HNOI2008]玩具装箱TOY \(dp[i] = min\{dp[j] + (sum[i] + i - sum[j] - j-L-1)^2\}(j < i)\) 定义:\(a[i]=sum[i]+i,b[i]=sum[i]+i+L+1\) 则 \[ dp[i]=dp[j]+(a[i]…
我们就像一把穿刺敌人的利刃,把敌人开肠破肚----凡尔登高地前气势汹汹的德军 今天没有考试,挺好,有时间自己做题了 今天主要复习+学习了数据结构,列了个表: 已完成:单调队列,线段树,set/vector,大根堆小根堆对顶堆 2.未完成:树状数组(紧急且重要),红黑树(可能永远都不会写了),主席树,treap平衡树(紧急且重要),二叉树,权值平衡树 做的题: 1.已完成:P1801 黑匣子(对顶堆/set/vector) ,P1168 中位数(线段树/对顶堆) ,P1276 校门外的树(增强版)…
标 * 的是推荐阅读的部分 / 做的题目. 1. 动态 DP(DDP)算法简介 动态动态规划. 以 P4719 为例讲一讲 ddp: 1.1. 树剖解法 如果没有修改操作,那么可以设计出 DP 方案 \(f_{i,0/1}\) 分别表示不选(\(0\))/ 选(\(1\))点 \(i\) 的最大权值,那么有 \(f_{i,0}=\sum_{x\in S_i}\max(f_{x,0},f_{x,1}),f_{i,1}=v_i+\sum_{x\in S_i}f_{i,0}\). 如果加上修改操作,那…