Miku 很好的坑题,务必注意因为负边权和求路径的问题,这里需要同时用到两种方法,搜索和dp。 对于原来的情况,事实上就是每一条边都要走两次,(毕竟你还要回来啊) 但是你要是建了一条边,就会形成一个环,那么这辆车就可以直接走回去了(沿着这个圈回到出发点,也就是说,少了一条边长度的距离) 那么怎么搞呢 ...
APIO2010 特别行动队 $$\frac{f_j+a\times sum_j^2+b\times sum_j f_k a\times sum_k^2 b\times sum_k}{sum_j sum_k} 2asum_x$$ 转移点 $j,k$ ,当前点 $x$ ,右侧是单调降的 如果 $j k ...
分类:
其他好文 时间:
2020-05-05 11:02:03
阅读次数:
61
"Link" 题目大意:一段区间的贡献是$ax^2+bx+c,x=\sum v$,求一个划分让总区间的价值最大。分段必须连续。 $\text{Solution:}$ 设计$dp[i]$表示前$i$个人的最佳划分价值。那么有转移: $$dp[i]=\max_{j using namespace std ...
Luogu P3629 [APIO2010]巡逻 树的直径 "题面链接" 看题就知道应该是连树的直径,也就是最长链 $ans=2(n 1) l1+1$ 但是$k\le2$ 当他是$2$的时候怎么处理??? 只好再跑一遍求树的直径 我们先把之前求出的$l1$的所有边变为$ 1$ 之后再求 $ans=2 ...
思路:斜率优化$DP$ 提交:$1$次 题解: 转移方程:$f[i]=\max(f[j]+A (s[i] s[j])^2+B (s[i] s[j])+C) 写成可以斜率优化的式子:$f[i]+A s[j]^2 B s[j]+C=2 A s[i] s[j]+f[i] A s[j]^2 B s[i]$ ...
今天在机房里考了这题。。。。。lbw巨佬一下考场就开始大喊“第二题把直径赋为-1再跑一次直径就行”,作为一个蒟蒻也没有啥好说的,自己弱,没办法。 下午再想这道题,忽然有个暴力的想法。 首先,加一条边就会使一条链(就是这条边连接的两点形成的链)上的边只用被走一遍。(这很显然) 所以,令dp[i][j] ...
这是一道关于树的直径的好题,值得一刷。 本题有两个难点,一个是分类讨论k,另一个是代码的实现(其实还好)。 本题k可以为1或2,因此我们分类讨论一下。 当k=1时,我们可以任选两个点连接,假设我们一条边都不连接,那么我们需要走2*m次,其中m为边的数量。假设我们在x,y上连一条边,那么我们用1个距离 ...
DP+斜率优化 dp[i]表示在前第i个士兵在特别行动队中最后一个时战斗力的最大值 sum[i]表示战斗力的前缀和 答案一定是dp[n] dp[i]=dp[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c 令j优于k,则得到 2*a*sum[i]*(sum[k]- ...
题目链接: "戳我" DP方程:$dp[i]=max(dp[i],dp[j]+a (sum[i] sum[j])^2+b (sum[i] sum[j])+c)$ ~~暴力还是可以过一些点的(不止20pts),甚至有人说他暴力水过去了。。。~~ 我们现在考虑正解,正解还是斜率优化。维护一个上凸包qwq ...
基本上是一个斜率优化裸题了 cpp include using namespace std; typedef long long ll; const int maxn = 1e6+10; ll s[maxn],x[maxn],n,a,b,c,f[maxn],ss[maxn]; int q[maxn] ...