摘要:
题意:给你一个数, 要求删去一些数字, 使得剩下的数字最大。这道题用贪心解决。大家想一想, 两个数比较大小, 肯定先比较第一位的数,然后依次比较第二位,以此类推。既然我们要保证最后的数字最大, 那么一定要先保证第一位数的最大, 然后保证第二位数最大,以此类推。所以贪心... 阅读全文
摘要:
这道题我真的想的非常的复杂, 拿草稿纸一直在找规律,推公式, 然后总有一些特殊的情况。然后就WA了N次。无奈之下看了别人的博客, 然后就惊了。直接暴力枚举两个相邻字符串里面的所有可能就可以了……真的是暴力出奇迹!#include#include#include#inc... 阅读全文
摘要:
排序之后, 尽量最小和最大的放在一个背包, 放不下就放最大的。#include#include#define REP(i, a, b) for(int i = (a); i < (b); i++)using namespace std;const int MAXN =... 阅读全文
摘要:
首先可以用扫描法处理出一个height数组, 来保存从当前行开始, 每一个格子可以向上延伸的最大长度。这种“延伸”的问题用扫描法, 因为往往这个时候可以利用前一次的结果来更新当前的值然后这道题的关键就是是维护一个单调栈, 栈顶的元素就是当前状态所求的答案。这个单调栈满... 阅读全文
摘要:
从左往右扫描一遍, 得从每个位置往右伸长不会碰到天花板的高度, 右往左一样, 取最小, 然后就是可以放“水”的高度了#include#include#define REP(i, a, b) for(int i = (a); i level) level = p[i]... 阅读全文
摘要:
这道题用构造法, 就是自己依据题目想出一种可以得到解的方法, 没有什么规律可言, 只能根据题目本身来思考。这道题的构造法比较复杂, 不知道刘汝佳是怎么想出来的, 我想的话肯定想不到。具体思路紫书上讲得非常清楚了, 就不讲了。代码有详细注释#include#includ... 阅读全文
摘要:
题意: 判断所给序列是否满足任意连续子序列中至少有一个出现一次的元素。思路:在整体中找到一个只出现一次的元素, 然后在递归两边。因为两边的序列中有这个数那就满足要求, 所以就看剩下的序列漫步满足要求。 参考了 https://www.cnblogs.com/jerry... 阅读全文
摘要:
这道题就是给你一n长序列, 然后把这个序列按顺序分成很多段, 每段长s(最前面可以小于s, 只有第一段的后半段, 最后面也同样, 只有最后一段的前半段), 然后要求是每一段里面没有重复的数, 问你有几种分法实际上看到连续s个数, 就可以想到滑动窗口, 可以提前初始化所... 阅读全文