康复训练
考虑矩阵dp,每次枚举行或列切开即可\(O(n^5)\)
考虑先全部用\(1*1\)的格子填,再考虑连起来,显然每个点要么向下要么向右连,而且只能选一种
于是把每个\(1*2\)的格子看做一个点,左右和上下连边,要求的就是一个最大独立集了
最大独立集=点-最小匹配
首先考虑求g_k表示gcd为k的倍数的答案
考虑任意一个删去的方案,每个删去的点相当于给边分配属于哪边的点
那么\(f_1=2^{n-1}\),考虑k>1时可以发现答案一定为0/1,具体的假如一个点所有儿子的边定了,那么这个点连父亲边也定了
则可以\(dfs\)判断,\(k\not |(n-1)\)时显然不合法,所以只需要对所有因数做
gym 102576 F
挺神奇的题
考虑如果不考虑打乱的操作,设\(f_i\)表示i个逆序对的最小花费,\(l_i\)表示i个逆序对的排列数量
只用考虑翻转和减少一个,这个可以简单dp出来
设\(x\)表示打乱后的期望,那么实际最小花费\(g_i=\min(f_i,x+c)\)
且\(x=\sum_i{g_i*l_i}/n!\)
考虑按照\(f\)排序,那么也就是说前面一部分\(g=f\),后面一部分\(g=x+c\)
枚举这个分界\(mid\)
则\(x*n!=\sum_{i=1}^{mid}f_i*g_i+\sum_{i=mid+1}^rl_i*(x+c)\)
解出\(x\)再判断在不在这个范围内
大概就是说考虑每个位置记到相等的最左边的位置即可
考虑每个相等的段是循环节,直接减去即可,\(a,b\)很少,暴力跳即可