03 2020 档案
摘要:经典的约瑟夫环,n个人排成一圈,第m个出队。 递归 code1 非递归 code2
阅读全文
摘要:每个字符串看成一个物品,两个属性是0和1的个数,转换为01背包。 code
阅读全文
摘要:简单搜索 code
阅读全文
摘要:求下一个排列,由于越后面权重越低,所以从后往前找到第一个递增(指从前往后递增)的位置,然后将这一位替换为后面比他大的最小的数,两者交换,然后把后面的部分再排个序。 code
阅读全文
摘要:经典的一个题,通过观察可以发现,每个高度能接的水就是左右两边分别的最大值的最小值再减去本身高度。 code
阅读全文
摘要:只能买卖k次,和上一题一样的dp方式,但是 当k大于n的一半时,就相当于无限次交易了 ,这个是没有想到的.... code
阅读全文
摘要:最多只能交易两次,因此只能用到dp做法,也可以拓展到只能交易n次。 dp[i][j][0/1]表示到第i个物品,第j次交易,买/卖得到的当前收益,第一维可以优化掉。 然后第j次交易买的收益显然就是第j 1次交易卖后的收益再减去当前价格。而卖的收益就是前面算出的买的收益再加上当前价格,注意这里指的是
阅读全文
摘要:可以无限次买卖,一次买卖其实就对应一段差分的和,无限次买卖就只要把正的差分加起来。 code
阅读全文
摘要:只能进行一次交易,维护前缀最小值。 code
阅读全文
摘要:求所有子数组的最小值之和,单调栈处理每个值作为最小值的区间,然后统计。 code
阅读全文
摘要:二分查找,lower_bound和upper_bound。 code
阅读全文
摘要:对每一个位置,求右边第一个比它大的数的位置。从后往前扫一遍,维护单调栈。 code
阅读全文
摘要:字符串的最长严格递增子序列,前后只能相差一个字符。 1. 直接O(N^2)暴力建图,然后记忆化跑个最长路。 2. 直接按字符串长度排序,然后求LIS。 code1
阅读全文
摘要:偶数堆石子,只能从首尾取,取多的赢。 每次操作会产生两个子状态,区间dp,记得先枚举长度。 code
阅读全文
摘要:最大子矩阵问题,n是200,枚举上下行,O(N)求一下最大子段和。 code
阅读全文
摘要:求严格上升的二维LIS,注意要 第一维升序,然后相同的按第二维降序,原理就是这样保证第一维相同的这些元素只有可能被选中一个加入LIS 。 code
阅读全文
摘要:委托 C 里这个委托我的理解是可以看成是一个 方法模板的类型 。(不过并没有找到相关的理解 比如有几个返回值,参数列表类型相同的方法,就能用同个模板类型来表示,然后实例化一个委托类型就绑定上一个或多个方法,然后就可以一次调用这多个方法,相当于把方法对象化?。 事件 事件需要用到委托,或者说是一种特殊
阅读全文
摘要:选择要公式所在格 在公式编辑处的左边,用:冒号,选择要填充的区域 点击公式编辑处,ctrl+enter,注意如果要固定某个格,比如求比值,要写成B$12这样
阅读全文
摘要:Java的引用实际上是对指针的一个封装。 C++的引用是变量的一个别名。 Java的定义出来的变量(除了基本类型)其实就是一个引用,指向真正的对象。 C++可以通过将引用传入函数,在函数内修改所引用的对象,而Java不能。 Java是值传递,对于函数参数是直接copy一份(基本类型是数值,引用类型是
阅读全文
摘要:题目地址 行列都有序的二维矩阵的查找 有个很经典的思路,以行列都是不降序为例,可以以左下角或者右上角为例,以这个副对角线为分割线,把矩阵看成一个二叉查找树。 code
阅读全文
摘要:题目地址 给定一个只含有abc的字符串,要求包含abc分别各一个的子串个数。 预处理每种字符前缀和,枚举子串左端点,二分查找满足条件的右端点,三个字符取最大的,直接计数。 双指针。 code1 code2
阅读全文
摘要:题目地址 给定n个数,初始有n个1,每次选择一个数,替换为所有数的和,可以无限次操作,问能否得到给定的数组。 显然,一次操作后的序列中肯定有一个最大值就是上一个序列的总和,反过来想,每一个序列的最大值就是上一个序列的总和。即Max_now=Sum_pre=Max_pre+其他数,因为其他数不会变,所
阅读全文
摘要:题目地址 给定n个会议时间区间,会议不用全程参加,问最多能参加的数目。 时间区间按左端点排序,扫一遍,每一天把当天开始的区间结束时间加入,同时把这一天之前结束的区间删掉,然后贪心从最小堆取出结束时间的区间即可。 multiset是最小堆,priority_queue是最大堆。 code
阅读全文