记录:
之前的记录并不是很及时,现在一并补上。并非不想记录,而是确实没什么可写的,主要在刷vj上贪心的题(虽然做得颇慢还有些不是独立完成的)。时间安排不是很合理,投入也不是非常多,有些题有了思路,大致敲一遍就忍不住看题解了,确实很多处理很高明。需要慢慢学习内化。总的来说有一定的提高,ac的感觉比较爽,当然因为一些奇葩的错误debug也是很让人炸毛了,积累经验吧。时间安排不是很合理,投入时间和精力还算多,有些题有了思路,大致敲一遍就忍不住看题解了,确实很多处理很高明。需要慢慢学习内化。不能不懂装懂,在尽量保证原创性的同时追求效率,拿来主义一下。
关于贪心问题思路的一点体会:
预处理+模拟+贪心+优化:预处理体现了贪心的边界,用循环或者递归将每个子问题模拟出来,每次模拟中执行贪心策略。预处理是贪心的第一步,需要全面思考,而模拟应该是贪心的关键只有把模拟过程真正解决才能最后完成整个算法。贪心策略要直接面向需求(poj-1456...虽然水,但是想了很久...),要不然很有可能出错
一些做题的时候觉得可以拿来优化的技巧和处理和注意事项:
很多贪心的题在模拟的时候(因为限制贪心的条件量是越来越少)往往需要倒着取(poj-1456)
C++和G++环境是不一样的,很多时候G++上能过的C++上不一定能过
main()前面要加int... int main()
除整数n向上取整:(x+n-1)/n
memset(a,b,sizeof(a)) :对数组a(可以是结构体数组)进行初始化,常用于标记数组或表示边界条件的数组,注意在循环过程中,往往每次循环都需要对标记数组进行初始化或者直接赋初值
一个常见的运算式:exp?x:y 若exp成立取值x,不成立取值y .如int max(int x,int y){return x>y?x:y}
并查集
经典问题:区间覆盖(取焦点)、背包