
斜率优化
C202044zxy
这个作者很懒,什么都没留下…
展开
-
[unknown OJ] ZZH的旅行
一、题目点此看题二、解法#include <cstdio>#include <vector>#include <iostream>#include <queue>using namespace std;const int M = 1000005;int read(){ int x=0,f=1;char c; while((c=getchar())<'0' || c>'9') {if(c=='-') f=-1;} while原创 2020-12-02 08:28:59 · 326 阅读 · 0 评论 -
[unknown source] 最亲祖先
一、题目题目描述给定一棵由n个点组成的树,第i个点上的权值为正整数ci。定义节点u与他的祖先v(u不能视为自己的祖先)的亲密度为cv−cudis(u,v)\frac{c_v-c_u}{dis(u,v)}dis(u,v)cv−cu,其中dis(u,v)表示树上两点之间的边的数量。请对每一个点,求出他与他的所有祖先的亲密度的最小值。输入格式第一行包含一个整数 n ,表示节点数量。第二行 n 个正整数 ci ,分别表示每个节点的权值。第三行 n-1 个整数,分别表示2到n号节点的父亲。输出格式原创 2020-11-08 15:45:58 · 166 阅读 · 0 评论 -
[NOI2019]回家路线
一、题目点此看题二、解法首先可以用暴力dpdpdp艹过去,设dp[i][j]dp[i][j]dp[i][j]为到了iii点的时间是jjj的最小花费,由于时间是单向流逝的,我们可以先把边按出发时间排序,用边转移,枚举到达出发点的时间jjj:dp[y[i]][q[i]]=dp[x[i]][j]+cost(p[i]−j)dp[y[i]][q[i]]=dp[x[i]][j]+cost(p[i]-j)dp[y[i]][q[i]]=dp[x[i]][j]+cost(p[i]−j)但是人总要追求正解,设dp[i]原创 2020-10-04 17:17:08 · 588 阅读 · 0 评论 -
[SDOI2013]保护出题人
一、题目点此看题二、解法感觉这道题网上讲解不是特别清楚,我来补一发详细讲解吧,因为作者也是花了好久才搞懂。首先把题目所求转化成形式化表达(其中sss是生命值aaa的前缀和):∑i=1nmaxj=1is[i]−s[j−1]x[i]+(i−j)d\sum_{i=1}^n\max_{j=1}^i \frac{s[i]-s[j-1]}{x[i]+(i-j)d}i=1∑nj=1maxix[i]+(i−j)ds[i]−s[j−1]是不是感觉难以优化,我们改换一种写法:∑i=1nmaxj=1is[i原创 2020-08-25 19:17:15 · 141 阅读 · 0 评论 -
CF311B Cats Transport
一、题目点此看题二、解法原创 2020-08-13 09:01:11 · 176 阅读 · 0 评论 -
CF1083E The Fair Nut and Rectangles
一、题目点此看题二、解法原创 2020-08-12 20:38:46 · 150 阅读 · 0 评论 -
CF319C Kalila and Dimna in the Logging Industry
一、题目点此看题二、解法原创 2020-08-12 09:23:09 · 224 阅读 · 0 评论 -
[CTSC2016]时空旅行
一、题目点此看题二、解法可以看出这些平行时空呈树形结构,每个星球都会出现在一段连续的dfndfndfn序中,而我们正是要对每个时空的星球中找最小值,那么可以把星球打在dfndfndfn的线段树上,使用线段树分治。考虑怎么从若干个点中选取最优解,首先y,zy,zy,z没有卵用,发现是平方的柿子,考虑斜率优化,x[j]>x[k]x[j]>x[k]x[j]>x[k]且jjj更优的条件:(X−xj)2+cj<(X−xk)2+ck(X-x_j)^2+c_j<(X-x_k)^2+原创 2020-05-15 11:46:36 · 333 阅读 · 0 评论 -
[NOI2007]货币兑换
一、题目点此看题二、解法请仔细读题,注意一下这句话:必然存在一种最优的买卖方案满足:每次买进操作使用完所有的人民币;每次卖出操作卖出所有的金券,这样就很好 dpdpdp 了,设dp[i]dp[i]dp[i]为第iii天过完后我们手中最多的钱数,首先可以什么都不干,从i−1i-1i−1直接转移,或者从之前的某一天jjj转移,用jjj所有的钱买入在iii这一天卖出,设x[i]=dp[i]Rate...原创 2020-04-06 11:09:08 · 224 阅读 · 0 评论 -
[SDOI2012]任务安排
一、题目点此看题二、解法设f[i]f[i]f[i]为划分到iii的最小费用,设t[i],c[i]t[i],c[i]t[i],c[i]为时间///花费前缀和,转移如下:f[i]=f[j]+t[i]×(c[i]−c[j])+s×(c[n]−c[j])f[i]=f[j]+t[i]\times(c[i]-c[j])+s\times(c[n]-c[j])f[i]=f[j]+t[i]×(c[i]−c[...原创 2020-03-25 09:05:54 · 222 阅读 · 0 评论 -
[APIO2014]序列分割
一、题目点此看题二、解法首先明确如果确定了划分点之后,答案和划分顺序没有关系,你可以考虑每一个块的贡献,就是这个块的权值和乘上后面的权值和,显然和顺序无关。设dp[i][j]dp[i][j]dp[i][j]为划分到iii,划分了jjj个段,转移直接滚动:dp[i][j]=dp[k][j−1]+(s[n]−s[i])×(s[i]−s[k])dp[i][j]=dp[k][j-1]+(s[n]...原创 2020-03-24 16:22:04 · 181 阅读 · 0 评论 -
[USACO08MAR]土地购买
一、题目点此看题二、解法首先考虑如果有一个块长和宽都比另一个块要小,那么这个块就没有存在的意义了,我们可以先排序(长为第一关键字,宽为第二关键字,从小到大),然后从后往前扫,期间维护宽的最大值,如果最大值不比当前宽小,那么这个块没用,我们去除完没用的点之后再排一遍序(方法一样)。这样就可以愉快的dpdpdp了,设dp[i]dp[i]dp[i]为划分到iii的最小花费,转移如下:dp[i]...原创 2020-03-23 16:03:32 · 238 阅读 · 0 评论 -
[HNOI2008]玩具装箱
一、题目点此看题二、解法设dp[i]dp[i]dp[i]为划分到第iii个玩具的最小花费,不难列出转移:dp[i]=dp[j]+(s[i]−s[j]+i−j−1−L)2dp[i]=dp[j]+(s[i]-s[j]+i-j-1-L)^2dp[i]=dp[j]+(s[i]−s[j]+i−j−1−L)2转移是O(n2)O(n^2)O(n2)的,我们推一下式子,设a[i]=s[i]+ia[i]=s...原创 2020-03-23 15:14:39 · 135 阅读 · 0 评论 -
HDU3507打印文章 斜率优化入门
打印文章一、题意及数据范围题目描述题目大意:输出N个数字a[N],输出的时候可以连续的输出,每连续输出一串,它的费用是 “这串数字和的平方加上一个常数M”,求最小的费用。数据范围n<=500000 , m<=1000。二、解法基本思路根据题目,我们可以列出dp[i]=dp[j]+(a[i]-a[j])2+m,其中dp[i]表示i点是最后一段的最后一个数字的最小花费,a[...原创 2019-07-22 20:10:05 · 314 阅读 · 0 评论