题解:B3803 [NICA #1] 上大分

不错的动态规划题,写篇题解纪念昨晚没打的 CodeForces。

不考虑分数限制

如果不考虑 Div.2 的 Rating 限制,可以用一个简单的线性 DP 做,用 fif_i 表示打前 ii 场比赛所得到最多的 Rating,转移方程:

fi=max(fi,fi1+aifi14)f_i=\max(f_i,f_{i-1}+\lfloor\frac{a_i-f_{i-1}}{4}\rfloor)

若考虑 Div.2 的 Rating 限制,一种想法是用数组标记哪些比赛可以打,但我们仍然可以通过下分来打 Div.2,不好处理,只能另找方法。

考虑分数限制

我们重新定义状态,用 fif_i 表示 Rating 变成 ii 最少打的比赛数,xx 表示当前 Rating 即可得出转移方程:

fx=min(fx,fj+1),x=j+aij4f_x=\min(f_x,f_j+1),x=j+\lfloor \frac{a_i-j}{4}\rfloor

时间复杂度在 O(n2)O(n^2) 级别,可通过,状态转移方程经过了滚动数组优化,未经滚动数组优化的状态转移方程和代码见@MTFlowCzq 的题解。

posted on 2024-08-31 16:57  zhangzirui66  阅读(13)  评论(0)    收藏  举报  来源

导航