摘要: 一道区间dp题,容易设计状态表示f[l][r]表示s[l~r]可能对应多少中金字塔方案数。 我们考虑在[l,r]中枚举一个k使得[l+1,k-1]作为l的一棵子树。那么s[l]应该等于s[k],状态转移方程为f[l][r]=∑f[l+1][k-1]*f[k][r]; 注意数据范围可能超过int,所以 阅读全文
posted @ 2019-04-07 13:48 AD_shl 阅读(303) 评论(0) 推荐(0) 编辑
摘要: 这道题当然可以用线段树求解,但是有点大材小用。我的做法是对顶堆,用两个堆维护中位数。 建立一个大根堆,一个小根堆。大根堆存储前半部分序列,小根堆存储后半部分序列,在任意时刻,这个序列的中位数为大根堆的堆顶或者是小根堆的堆顶。 如果现在新加入了一个数x,判断x应该在大根堆还是小根堆中,即判断排序后x在 阅读全文
posted @ 2019-04-07 12:20 AD_shl 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 一道区间dp题,不少细节。 一开始我想定义f[i][j]表示区间[i,j]通过某种合并之后的最大值,之后这道题就等同于“NOI1995石子合并”。 但是转念一想,这道题有加法和乘法两种运算,如果单看加法,以上思路正确。但是因为乘法的存在,两个较小的数(负数)相乘或许会大于两个最大数相乘,因此以上思路 阅读全文
posted @ 2019-04-07 11:52 AD_shl 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 区间动态规划的经典题,关于区间dp,状态定义是很显然的,定义f[i][j]表示把i~j这一区间合并花费的最小值,若i=j,则f[i][j]=0,若i≠j,则在i,j当中必定有一点k,使得i,j的区间先合并成i,k和k+1,j,然后合并成i,j.因此,对于每一对i,j,我们都枚举k,那么f[i][j] 阅读全文
posted @ 2019-04-07 10:40 AD_shl 阅读(279) 评论(0) 推荐(0) 编辑