第一次考试_笔记

心路历程
0:00-0:20 快速阅题,没有思路,脑子发懵
0:20-0:30 意识到了自己脑子里已经是一片空白,需要改变。可是懒懒地不想改变。
0:30-0:32 跟大佬交流。回忆起“考场上先打暴力”的经验,决定开始打暴力。
0:32-0:34 一边分析一边心情急躁,在办公室站起并快速徘徊,思维敏捷
0:34-0:38 发现可以把心路历程记录下来以供以后调整。所以写了这个。
0:38-1:01 分析了一下第三题,有些头绪但是还不够,转而处理前两题的暴力。  
1:01-1:02 LIS好麻烦啊,真想抄板子。
1:02-1:03 虽然思路遇到了障碍,但是心情已经冷静下来了。可不能就这么放慢速度啊!
1:03-1:08 表面上在想正解,其实想不出,而且还走神了
1:08-1:11 不开心,对于LIS并不好打感到不确定。调整心情,继续动手。
1:11-1:20 暴力越想越顺,时间过得比想象中的慢一些。
1:20-1:30 思路打断,突然空白。
1:30-1:56 开开心心打暴力,然后暴力的核心算法是错误的!
1:56-2:00 收拾收拾走人

(中场休息)

---------------------------------------------------------------------------------------------------------------

T3想法:

难点一:判断冲突

1.同一方向的炮台不存在冲突

2.相垂直的方向中,可以写一个小小函数来判断冲突。为了变量传递的方便,最好用结构体来存储炮台,并把map上炮台的位置设为负数。

难点二:在冲突中作出决策
1.分治:先转化为“二选一”的问题,当然是选择更多的啦。
2.转化:第一条是典型的贪心。不如用动态规划来写。
3.判断:子问题性质满足。无后效性原则满足。
-------------------动态规划-----------------------
1.阶段的划分:战场的大小
2.决策的作出:取max

3.状态转移方程:if(冲突) f[i][j]=max{f[i-1][j-1]-c}


难点三:时空复杂度的估算

1.可以只开int,不过,看起来开long long更加保险。


T1想法:

1.先打打纯暴力试试看
2.LIS不好打?没关系,这个你是写过的。打一打还有很大可能写出来,不试试就真的写不出了!
3.回忆起还NlogN的做法,不过不记得了。
4.发现N^2的做法似乎也不会超,数据小。


5.算出length(lis)==m的方案数,然后除以C(n,m)即为答案。可是会爆吗?
6.恐怕要爆。


7.暴力打完了,可是答案比样例答案多1


8.不作无意义的代码精简

9.该暴力错误,还是乖乖地按直观做法来暴力吧。


T2想法:

要么狂暴dij(超时),要么记忆化搜索(爆空间)

不过反正我们是来打暴力的。欸,没有时间了!

---------------------------------------------------------------------------------------------------------------

看题解:我看不懂哈哈哈哈哈哈哈

原文地址:https://www.cnblogs.com/nishida-rin/p/12271137.html