摘要: 满分做法: $dp[i][j][k][1/2]$表示到a串的第i位置为止使用了$k$个子串匹配到b串的前j个且当前i位置选还是没选的方案数,因为当前只和$i 1$有关,所以第一维可以滚动。 考虑转移当$a[i]==b[j]$时,$dp[val][j][k][0]=(dp[val^1][j][k][0 阅读全文
posted @ 2019-10-18 15:44 lihan123 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 满分做法: 因为每个数都小于$10^{18}$,因此每个数最多有$64$位,因此如果有超过$128$个非零数字,那么必定有一位在$3$个及以上个数的二进制表示下为$1$,所以最小环大小为$3$。 当n include include include include include using nam 阅读全文
posted @ 2019-10-17 20:50 lihan123 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 满分做法: 把人向床连边进行二分图匹配即可。 cpp include include include include include include using namespace std; typedef long long ll; const int maxm=5555; int t,n,ans 阅读全文
posted @ 2019-10-17 20:45 lihan123 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 60分做法: 暴力跑dijkstra即可 阅读全文
posted @ 2019-10-17 15:33 lihan123 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 满分做法: 由题:s[u] include include include include include using namespace std; typedef long long ll; const int maxm=1e5+7; int n; ll ans; int f[maxm]; ll 阅读全文
posted @ 2019-10-17 14:29 lihan123 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 1.$ 128$的补码是$10000000$,$ 1$的补码是$11111111$。 2.属于TCP拥塞控制算法有:慢启动,拥塞避免,快速重传。 3.同时查找$2n$个数中的最大值和最小值,最少比较次数为$3n 2$; 前两个数比较,大的为最大值, 小的为最小值, 用掉一次比较后面$2 (n 1)$ 阅读全文
posted @ 2019-10-17 10:05 lihan123 阅读(602) 评论(0) 推荐(0) 编辑
摘要: 满分做法: $dp[i][j][k]$表示在区间$[i j]$加上一段长度为$k$,且数字和$a[i]$相同的序列,要消除这整个序列所需要的最小操作次数。 1.普通情况:我们可以在当前状态继续在前面加一个与$a[i]$相同的数即:$dp[i][j][k]=dp[i][j][k+1]+1$。 (1): 阅读全文
posted @ 2019-10-17 07:34 lihan123 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 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) 编辑