摘要: 50分做法: 可以发现答案具有单调性,所以二分答案。判断是否可行就需要DP。dp[i]表示到第i个格能得的最大值,从能跳向它的格进行转移即可。 满分做法: 50分做法的转移是O($n\sqrt{n}$)的,如何更快的转移呢?因为随着格的转移,能被跳到的区间也在转移,而且他一定是从这个区间中的最大值转 阅读全文
posted @ 2019-10-16 17:59 lihan123 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 满分做法: 枚举每个边作为生成树的最小边,再进行最小生成树求出最大边,做差比较即可。 cpp include include include include include using namespace std; typedef long long ll; const int maxm=20007 阅读全文
posted @ 2019-10-16 16:48 lihan123 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 满分做法: 由题,0和1的交界处把0,1分成两个矩阵,满足杨氏矩阵的性质,可以用钩子公式解决。对于给定形状,不同的杨氏矩阵的个数为:n!除以每个格子的钩子长度加1的积。其中钩子长度定义为该格子右边的格子数和它上边的格子数之和。 因为可以分开算,由打表可知一段的方案数就是长度的卡特兰数。 钩子公式 c 阅读全文
posted @ 2019-10-16 15:12 lihan123 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 满分做法: 这道题蛮难想的,$dp[i]$表示到i位置的最大操作数,$11111101$和$1011111$这两种情况我们可求出它的最大操作数为长度$ 2$,并发现整个序列的操作数可以拆分成几个小序列的最大操作做次数之和。 所以我们要记录$l[i]$表示左边离$i$最近的$0$的位置,并得出转移: 阅读全文
posted @ 2019-10-16 07:50 lihan123 阅读(170) 评论(0) 推荐(0) 编辑