比赛时间安排
7.20-7.40
t1 感觉神似有一道单调性优化+主席树的题目,假期,但是这个数据范围好小,应该不是
t2 这。。中间还有空,这么搞
t3 又是高斯消元的类型吗?但是这个数据范围太大,应该做不了,暴力貌似可行?但是样例这推不明白啊
t4 前70分是个数,然而并没有什么想法,选择是有后效性的
7.40-8.20
那t1的方案就是要不就是往左走再折回来一直往右,要不就是反过来?写下来样例都对了,但是不能保证正确性。不过暴力没想法,就先这样吧
8.20-9.10
想t2的第一档,觉得很不对劲,发现我题意理解错了,中间没有空格,而是可能有些位置是空的,这样10分就会写了,应该是nl,dp一下,再用个前缀和就行了
9.10-9.40
突然想到了t1的暴力方法,站在0号点,看下一步向左还是向右走,然后这样应该能20,样例没问题,于是和自己的贪心对拍了一下,竟然5分钟没错??这。。
9.40-12.00
看t3,我列高斯消元的式子,但是有一个瓶颈,就是正常来说,是以一个结点作为终点,这个我会写,但是随机一个叶子作为终点不好表示,前面的系数怎么确定,万一这个叶子是终点了,那他的父亲还能从他走过来吗?还有就是概率的高斯消元怎么办?都是问题,一头雾水
t4的树形问题,如果考虑dp,设f[x][y]表示x的子树里修改了y个点使得状态合法的最小代价,但是这仅满足局部最优,后面的转移用不上,而且后面的还可能影响见面的,那倒过来,变成拓扑?可行吗?并没有想出好的方法
t2 n=10的时候感觉是枚举排列,然后做dp,可是复杂度必然爆炸
好自闭啊!!
赛后总结反思
- t1有个地方没开ll,本来想着已经特判掉了,maxt<=1e9的,肯定不会炸,但是应该是在运算过程中炸掉了啊
- 高斯消元的模型就是不熟悉,上次觉得能写出来了,但是!啊不甘心!!!!
- 骗分技术不够,要多学习,不然不写非常难受
- 数组开小了,因为光想着部分分了,以为这一档n<=30,我错了呜呜呜
- 最近小错误又犯得多了起来。。emm要稳住啊,马上就省选了
与正解的差距
T1
正解的dp状态是f[l][r][k][0/1]表示左边经过了l个,右边经过了r个,一共拿了k个,上次拿是在左端点或者右端点的最小时间。
状态设置和之前有一道题特别特别想,具体是什么不记得了,但是对于这种左右取的,这样的dp确实是套路,另外还有一个技巧就是如果把t放到状态里会爆,那么就把答案放进去,最后判定是否合法就行了。
其实dp整体的转移,和我的暴力dfs相差不大,在写完之后应该要有这方面的敏感性,多注意一些,积累下来
T2
首先n=10的暴力就是枚举n的全排列,然后贪心的把这n个磁铁尽量往前放,这样后面可能会留下一些空位置,任意往前面n+1个空位中插(n个磁铁把序列分成n+1份),插的方案数累加起来就有20分了
正解其实就是利用上面那个暴力的思想,上面的复杂度其实就是在求空位有几个,那么我们就用dp把这个优化了(虽然不能叫优化)。
T3
40 骗分部分就是模拟随机游走(真·随机游走),然后直接算期望!
40正确的做法高斯消元,加了一维状态来解决我的几个问题。首先我把访问到节点x,已经访问过的结点状态为s压成a[][]的一维,表示一个状态,这样很容易知道终止状态就是访问到du[x]==0的结点,且所有结点都访问过了(因为,如果要访问过所有叶子结点,必然需要访问整棵树的所有结点),那么对于这样的状态,我们就不再转移即可。这样又解决了一个问题,就是列不出来方程怎么办?没关系,如果感觉找那些状态可以转移给自己不方便,那么我们就找自己可以转移给哪些状态,这样一个方程直接就列出来了,同时结束的时候不往别的地方转移就行了!呜呜呜,没有想到。