随笔分类 -  动态规划 -- 斜率优化

摘要:link $solution:$ 算法一 通过观察范围发现 $q\leq1000$ ,所以直接暴力拆点 $dp$ 。时间复杂度 $O(1000m)=O(能过)$ 。 算法二 因为有 $A\times x^2+B\times x+C$ 考虑斜率优化。 设 $f_i$ 表示走完第 $i$ 条边的最小烦躁 阅读全文
posted @ 2019-07-20 12:01 siruiyang_sry 阅读(547) 评论(1) 推荐(2)
摘要:link 试题分析 其实可以发现我们选择切的顺序可以颠换。 所以我们可以设$dp(i,j)$表示为前$i$个共切$j$的最大得分,然后$dp(i,j)=max(dp(i-1,z)+s[z] \times (s[i]-s[z])),s[i]=\sum_{i=1}^i a_i$。 然后发现这是个斜率优化 阅读全文
posted @ 2018-12-14 20:59 siruiyang_sry 阅读(161) 评论(0) 推荐(0)
摘要:link 试题分析 做这种题就应该去先写个暴力代码 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> using namespace std; inline int 阅读全文
posted @ 2018-12-14 15:51 siruiyang_sry 阅读(203) 评论(0) 推荐(0)
摘要:link 维护一个上凸壳就行,普通的斜率优化。 若想要具体过程请参考以前博客 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #define int long long using namespace 阅读全文
posted @ 2018-12-13 20:21 siruiyang_sry 阅读(150) 评论(0) 推荐(0)
摘要:link 其实是一个需要许多次换元的$dp$,比较简单。 我们通过层层操作以后得到式子$f[j]+s[j]=d[i]\times k[j]+s[i]-val[i]-d[i]\times k[i]+f[i]$ 然后会发现里面的横坐标$(X)$,纵坐标$(Y)$与斜率,然后发现还是维护下凸壳,然后就单调 阅读全文
posted @ 2018-12-12 21:05 siruiyang_sry 阅读(160) 评论(0) 推荐(0)
摘要:link 试题分析 设$dp[i]$表示为去选择第$i$个位最后一个的总价值。复杂度:$O(n^2)$ 将$s[i]=\sum_{i=1}^i {c[i]}$,然后$a_i=s_i+i,b_i=s_i+i+1+L$,所以$dp[i]=min{dp[j]+(a[i]-b[j])^2}$ 得:$f[j] 阅读全文
posted @ 2018-12-12 16:19 siruiyang_sry 阅读(184) 评论(0) 推荐(0)
摘要:link 试题分析 一道斜率优化的dp 易得方程$f[j]=(S+t[i])\times c[j]+f[i]-t[i]\times c[i]+s\times c[n]$,为什么要写成这要,因为这样其实就可以将$min$拆掉,并且是一个函数形式,$(S+t[i])$为斜率,$f[i]-t[i]\tim 阅读全文
posted @ 2018-12-12 15:07 siruiyang_sry 阅读(190) 评论(0) 推荐(0)