$ 做题总结 $
每次做之前看一看。做题千万不要分心,不要做一下这道题就去干别的事。
OI思想:正反,抽象,等效,益少,独立
对于OI思想的一些思考与理解
独立:对于那些会改变的值,比如说数组之类的,显然他的下标的关联越少越好。比如f[k]和f[i-j]相比,肯定是前者更好,因为前者更为固定,通常可以通过前缀和或是其他的方式来优化。又或是那些由枚举得到的值,显然预处理存起来后会更好。
抽象:这是最好理解的,就是把一些实际问题转化成图或是一些现实不存在的东西,方便使用各种算法去求解
正反:有的题目从正向不好操作,就可以反过来看看是不是更好求解,比如让你移动棋子可以变成移动空格
益少:显然,状态数越少,分类的情况越少,会是更优的。
等效:这就需要很好的感觉,要能发现什么情况几种东西其实是等价的,可以减少很多讨论。
总体:
1.一定要想写好思路,并且确定思路的可行性,并在脑海中理清楚代码如何实现后在写。可以避免全部白打。!!!一定要确保可行性后再写,不要写假了。
在遇到难点的时候把问题打出来,对着问题去找解决方案。
2.读懂题意后再写
3.预处理可以几种预处理一起使用,可以事先存储出尽量多的数据
4.可以边做边列做题记录。记录格式:
xx题目
特殊性质:
(这道题有什么特殊的点)
1.莫一维特别小
=>可以从这一维去枚举,dp
大致思路:
怎么做,代码怎么打
问题点:
1.需要区间修改。
=>使用线段树
......
做题时如何思考
思考一定要深入,不断思考本质
1.可以把操作,问题分开讨论。比如可以通过 $ 分论讨论 $ 将问题转化为几种好处理的情况。(如环上问题就可以转化为链,再讨论有没有过端点)
\(=> 分类思想\)
2.不等式可以尽量转换出一些特属的值,比如说0之类的
3.做题时可以找每一道题的特殊点,有什么特别的地方。
4.可以自己画一画图,手模一下。
5.敢于大胆猜测结论
6.用等效的思维,什么情况下是等效的 $ => 等效思想$
7.一个值如果可以单独表示的话,尽量单独表示,不要由前面的值推来,这样可以方便优化(如前缀和) $ => 独立存在,减少依赖$
8.一些结论题可以用过打表来找结论
9.可以反着从不同的角度看问题。比如找一段和小于p的数可以变成去找一个区间和小于p $ =>正反思考 $
贡献最值
思考说明情况下会有贡献,贡献是如何变化的
数学题
1.看到整个题都是一些数学,并且不好跟图之类转换时,一般就是数学题,就需要去推式子(虽然不是数学题有的也要推式子)
2.数学推出了比较重要的式子时一定要去想有什么用,该怎么写代码
dp
1.觉得当前状态无法转移的时候,可以多保存几个状态,看看是否可以转移了
数位dp
1.一定要记得讨论前导0!!不要觉得可以不要
2.要记得清空dp数组。
3.通常是答案跟每个数的组成有关,可以用数位dp
4.数位dp转移中的ans+=dfs(...)。表示的含义是所有i(dp[x])的答案(idp[x])是一个数
状压dp
1.一般情况下有一维很小且只有两种状态
一些杂碎的小技巧
1.平均数可以都减掉一个数变成0,变成前缀和
标签:总结,可以,等效,做题,思考,数学题,dp From: https://www.cnblogs.com/shadom/p/17554785.html