随笔分类 - 动态规划 -- 斜率优化
摘要:link $solution:$ 算法一 通过观察范围发现 $q\leq1000$ ,所以直接暴力拆点 $dp$ 。时间复杂度 $O(1000m)=O(能过)$ 。 算法二 因为有 $A\times x^2+B\times x+C$ 考虑斜率优化。 设 $f_i$ 表示走完第 $i$ 条边的最小烦躁
        阅读全文
                
摘要: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$。 然后发现这是个斜率优化
        阅读全文
                
摘要:link 试题分析 做这种题就应该去先写个暴力代码 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> using namespace std; inline int 
        阅读全文
                
摘要:link 维护一个上凸壳就行,普通的斜率优化。 若想要具体过程请参考以前博客 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #define int long long using namespace
        阅读全文
                
摘要:link 其实是一个需要许多次换元的$dp$,比较简单。 我们通过层层操作以后得到式子$f[j]+s[j]=d[i]\times k[j]+s[i]-val[i]-d[i]\times k[i]+f[i]$ 然后会发现里面的横坐标$(X)$,纵坐标$(Y)$与斜率,然后发现还是维护下凸壳,然后就单调
        阅读全文
                
摘要: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]
        阅读全文
                
摘要: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
        阅读全文
                
                    
                
浙公网安备 33010602011771号