做题思考总结

$ 做题总结 $

每次做之前看一看。做题千万不要分心,不要做一下这道题就去干别的事。

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,变成前缀和

posted @ 2023-07-14 19:00  shAdomOvO  阅读(62)  评论(0)    收藏  举报