起因是在 Huawei
的 online camp
上遇到一道题,虽然现在也不知道怎么解决的。当时想法就是是不是四边形不等式或者斜率优化之类的。好像一直以来都知道自己在这方面只是了解,没有很深入♂掌握,趁这次补一下吧qwq。
说到 Dynamic Programming
我就很喜欢大一时候的一句话:But life ,can't satisfy with all factors of Dynamic Programming
dp
也有很多形式的优化,比如是否具有决策单调性,斜率优化,数据结构优化,带权二分,单调栈单调队列优化等等。
前缀和优化
P2513 [HAOI2009]逆序对数列
Description
求长度为 $n$ 的有 $k$ 对逆序对的排列数量 $n,k\le 1000$
Solution
考虑 $dp[i][j]$ 表示 $i$ 的全排列中,逆序数为 $j$ 的数量。
那么有
因为状态转移连续,可以记录前缀和优化。记录$sum=\sum_{k=max(0,j-i+1)}^{j}dp[i][k]$,转移时候注意减去前缀就行。
Code
1 | int n , k, sum; |
此题加强版 loj6077
洛谷P2511 [HAOI2008]木棍分割
1 | int n , m , a[maxn], sum[maxn], mx, dp[maxn], S[maxn],ans,rem[maxn]; |