luoguP1415 拆分数列

比较好的dp题
但是被我几下口头ac了,然后还是正解。。。。。。
嘛,首先那个最小化很麻烦,怎么办呢
做掉!
直接把最小的给dp出来。。。
具体转移如下。。。。
f ( i , j ) i j f(i,j)前i位,最近一次起点是j
显然直接转移有:
f ( i , j ) = m i n ( f ( i , j ) , n u m ( i , j ) [ n u m ( i , j ) > f ( j , k ) ] ) f(i,j) = min(f(i,j), num(i,j)[num(i,j)>f(j,k)] )
最后答案是:
m i n ( f ( n , i ) ) min(f(n , i))
总的复杂度是:
O ( n 3 ) O(n^3)
可以在1s内解决。。。。

然后知道了最小值了,前面最大值如法炮制,只需要再加层条件就好了:
n u m ( i , j ) < M I N num(i,j)<MIN
然后考虑怎么输出方案。。。。
一般dp输出方案不是用数组保存就是dfs递归。。。
这里很显然属于前者。。。

我们考虑dp的时间记录分割点。。。然后以此递归回去,就可以解决本题了

代码先欠着。。。。明天要起来文化课。。。
还是先写一点吧。。。。毕竟我这么菜。。。

发布了80 篇原创文章 · 获赞 3 · 访问量 1754

猜你喜欢

转载自blog.csdn.net/qq_41567618/article/details/104602012