停课训练的第一天,还有六天NOIP
抓紧训练
记录下今晚小小的思考,有部分偏于思维漏洞
- 用栈模拟一类题,就是一串数中删掉中间一部分数,然后若要将两边重新连上,之前要么花大时间重新赋值,要么用链表导致失去直接用数组\(O(1)\)访问的功能,现在发现还可以用栈,若没有在线修改,那么可以从左往右顺序加入,出现了要删的就弹出,每个数一进一出时间是\(O(n)\),类似是单调队列的思路
- 状压DP思维上的束缚:总是觉得一定要有一个图,然后能让我一行行一列列去算,才会想到状压DP,亏昨天晚上xmoj.tech的比赛,暴露出了我之前没改完题导致的一点漏洞,这道题是状压DP,看到数据\(n≤14\)就差不多能够猜得到是状压,但看题是真的不知道,当时在思考关于全排列的DP,但全排列的时间复杂度还是很大的,而且康托展开也无能为力因为状态本来就多,如何把一道关于排列顺序的题转化为状压DP?之前传统的状压DP是一行行考虑,这里可以改成一个个考虑,\(F_{i,j}\)表示当前已经加入了哪些点(状态j),然后第i个点现在是放在左边还是右边,然后枚举状态是\(O(n·2^n)\),暴力转移是\(O(n)\),就是三百万左右的时间复杂度,轻松通过
- 关于数位DP:才发现关于求答案一没想通,其实很简单,处理完状态后,再从上一层转移一遍成答案需要的就行了