dp

P1772

\(f_i\)为第\(i\)天的最小总代价,枚举上一次改变的\(j\),那么转移方程为:

\[f_i=f_j+cost(j+1,i)\times(i-j)+k \]

cost可以直接暴力计算。
时间为\(O(n^2e\log e)\),瓶颈在于cost的暴力计算

CF1312E

不会,看题解:

题解1

题解2

CF1485F

第一种做法:
0.\(b_i = a_i\)

1.\(b_i = \sum_{j=1}^i a_i\)

给定\(b\),求\(a\)个数

如果相等,那么会记重

因为有些操作序列获得的\(a\)是完全一样的

我们优先选择0。

比如:\(b={0,0},a={0,0}\)

\({1,1}\)是不合法的,只有\({0,0}\)合法。

那么我们对\(0/1\)操作序列进行dp

设$f_{i,0/1} $ 第\(i\)个操作(0,1含义如上)的方案书

我们可以写出如下转移方程式

\[f_{i,0} = f_{i-1,0}+f_{i-1,1} \\ f_{i,1} = f_{i-1,0}+f_{i-1,1} - 不合法 \]

不合法的只有:

\[\sum_{j=1}^{i-1}a_j = 0 \]

那么我需要找的一个\(f_{j,1}\)

易得为\(s_{j-1} = s_{i-1}\)
用mp维护即可


第二种做法:

题解1

题解2

CF1209E2

松/紧限制做法

只有最大值是前[1,n]大的才可以。

\(r_i\):第i行随便选

\(f_{i,S}\):考虑前i列,每一行是否已经选出\(r_i\),我们将这个记成二进制数\(S\)

枚举子集

\(f_{i,S}\Longrightarrow f_{i+1, T|C_{U}S}\)

\(g_T\)为在第\({i+1}\)列选出集合\(T\)的最大值

那么时间为\((2^n n^2 + 3^n n)\)


dp题只能多做

posted on 2026-07-29 16:14  秋天的宇宙  阅读(11)  评论(0)    收藏  举报

导航