- 博客(9)
- 收藏
- 关注
原创 https://codeforces.com/contest/1862/problem/F
比如,如果x > j && x < i,a[x] <= a[j],此时的dp[i - 1][x]最后一部分已经是a[x]了,那么如果我们想要转移到dp[i][j],就肯定要把从j开始的一段全部变为a[j],但是会将a[i - 1] -> a[j],可以发现,此时我们假设的x其实已经变成了另外一个数了,那么状态都不对,则对应的方案数肯定也不对。差不多不合法的方案原因类似。那么,我们首先按照...j < i...j=i...j > i三个分类讨论,然后再按照上一维的状态dp[i - 1][x]转移。
2023-08-28 19:17:35
74
1
原创 2023杭电多校 Circuit
可以用floyd求解。在floyd中,三层循环k,i,j,此时利用k更新i->j的距离,那么如果j->i有边,那么就会构成环。所以d[i][j]表示i->j的最短距离,cnt[i][j]表示i->j最短路径的条数,d[i][j]表示初始状态下的i->j的边。同时,为了避免对一个环的重复计算,我们考虑在环的编号最大的结点去计算,这是由于floyd本身是个dp的做法,完整形式应该是dp[k][i][j],表示从i->j,由不超过k的结点更新的最短距离,也就是说,除了i,j以外,路径上的点不超过k。
2023-07-28 10:24:53
144
1
原创 2023“钉耙编程”中国大学生算法设计超级联赛(3) Out of Control
2.形如1 2 5 2这个序列在该题的规则下的状态应该是1 2 5 5,也就是我们找出了此时序列的最大值,我们想在最后一个位置,添加一个a[i], 那么我们可以添加一个小于等于a[i]的数,那么它就会变成a[i],那么这种情况可以发生的前提就是小于等于a[i]的个数cnt此时应该要够,用状态表示就是此时是选出了j个数,那么允许发生j个数的前提就是cnt[a[i]] >= j,那么这样的j是被允许构造出来的。我们可以这样定义状态。dp[i][j]: 从前i个数中选j个,且以a[i]结尾的合法序列的个数。
2023-07-26 11:16:09
296
1
原创 20172018-acm-icpc-pacific-northwest-regional-contest-div-2- F - Purple Rain
笔记
2022-07-07 21:06:18
154
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人