8.29
校内OJ的题目,模拟赛烂完了
14:49 治病
这个题首先是要意识到\(\Sigma{K}<=1e6\)
这个时候你就可以直接离散化然后差分等等一套上来了。
注意要对于每种药内来离散化,才能保证复杂度。
15:10 拓扑序计数
\(O(2^n*n^3)\)的状压dp是裸的,虽然说考试的时候完全没想(
接下来是想优化:
我们可以枚举一个y,它处于我们的模板全集串的中间,这把全集串分为\(A+y+B\) ,
那么可以确定A中所有的点和y构成答案。
当然,你需要保证合法,有以下几点:
\(1.y不是A,B的子集\)
\(2.y不能到达A中的点(你要保证拓扑序)\)
\(3.B中的点不能到达A中的点(理由同上)\)
这题就这了。
其他的题目还没补全,别急
然后就是自己的练题
15:53 Corn Fields G
状压水题,除了一个不能相邻以外就是炮兵阵地类板子。
这个也只用t&(t>>1)||t&(t<<1) 就好了。
16:43 线性基
听老师提到过几次就决定学一下。
原理涉及线性代数,这里只讨论线性基一些有用的性质。
好吧其实代码就能说清楚了:
int que_max(){
int ans=0;
DF(i,60,0)ans=max(ans,ans^p[i]);
return ans;
}
int que_min(){
if(!flag)return 0;//flag是指能否合成0
F(i,0,60)if(p[i])return p[i];
}
很优秀的性质,可以在\(O(logn)\)的时间内求出异或和最大。
其实和 \(0/1trie\) 挺像的?
18:45 道路
大褐特褐,没什么思路就看题解了。
状态是 $u,i, j $ 对应的是\(u\)点到根的路径上有\(i个L\)左没修,\(j个R\) 右没修,那么对于叶子节点直接枚举转移,然后非叶子节点是
dp[dfn[u]][i][j]=min(dp[dfn[ls[u]]][i+1][j]+dp[dfn[rs[u]]][i][j],dp[dfn[ls[u]]][i][j]+dp[dfn[rs[u]]][i][j+1]);
就是暴力转移。
但是有一点,就是空间寄了。
但是子树与子树之间是独立的,这样你可以用dfn序来优化你的空间:

就过了。
所以说题目什么语文考察。
有时间再看看吧。

浙公网安备 33010602011771号