习题课3-2(动态规划2、计算可行方案)
习题课3-2(动态规划2、计算可行方案)刷油漆n辆车排成1排,还有m种涂料,第i中涂料可以涂ai辆车,恰好可以涂n辆车,要保证相邻车辆油漆不同问题分析排成一排恰好涂完相邻车的油漆种类不同解法1(动态规划)令f(x,p,c1,c2,…,cm)表示第x辆车到第n辆车,第x-1辆车涂的油漆种类是p,第i种油漆还剩下ci次,得到的方案数f(n+1,p,0,…0) = 1f(x,p,c1,c2,…,cm) = f(x+1,q,c1,c2,…,cq-1,…,cm)求和 其中n等于ai求和
习题3-3(动态规划)
习题3-3(动态规划)倒水问题三种操作,倒满、倒空、把A杯中的水倒向B杯t<=4 搜索 t<=100的量级用DP(有一种是类似搜索记忆法) t<=200记录当前的状态,两个水杯的水量,操作数,当这三者相等时的操作,这两者是等价的,不管中间经历了什么,经过了若干次操作后,A杯和B杯最终的水量是各自相等的dp(i)(u)(v) 经过i次操作能否把A杯倒出u这么多水,或者把B杯倒出v这么多水标答demon=3 m=2[外链图片转存失败,源站可能有防盗链机制,建
习题课4-1(hash、回文串问题)
习题课4-1(hash、回文串问题)矩形给定两个矩阵,判断第二个矩阵在第一个矩阵哪些位置出现过输出位置的左上角有多个答案,按字典序输出解法1用一个数字来代替一个矩阵枚举两个矩阵,n4,,504是1亿以内的解法2哈希字符串ebacdhash(ebacd) = (5B4+2B3+B2+3B1+4B^0) mod moB是大于26的任意指数 mo为一个很大的质数如何尽量减少碰撞的可能取两套B mo,如果算出来的hash1和hash2都相等,则认为这两
习题课4-2(子串(动态规划)、前缀串问题(trie树))
习题课4-2(子串(动态规划)、前缀串问题(trie树))回文串比较正反hash值线性时间计算出hash值?后缀和计算邓老师数质数是除了1与自身不再有其他因数的正整数是一个合数质数用筛法求解代码解析i从2到n枚举把它的2倍到若干倍但是小于等于n的数标记为合数筛掉质数倍数的数(质数倍数的数不是质数,但是要判断一下)子序列解法1O(2^n)的时间吧所有的子序列求出来,然后去重解法2(动态规划)递推,在竞赛中也称为动态规划f(i)表示s(i)所拥有的不同
习题课4-3(哈希桶、KMP)
习题课4-3字符串匹配kmp算法1.构造next数组2.匹配next数组从第一位开始匹配,直到不相同,记录了最长长度的匹配,下次匹配,直接从这个位置开始匹配大串ababcabcaba 模式串abcabafori 从start开始,a匹配上,移动到a,b匹配,移动b,c不匹配,回到start,回到start,重新匹配,不匹配的话一直往回走,直到回到start,前两位匹配上,一直比较到最后一位,不匹配,回到模式串的倒数第二位b,一直回退到模式串的第三位c,发现匹配
习题5-1(凸壳、拓扑排序)
习题5-1(凸壳、拓扑排序)凸包卷包裹求凸壳解法1求上下凸壳,类似卷包裹,但是不是极角排序(任取一个点,做极角排序)按照先x轴后y轴的方式升序排序,这是为了找到一个一定在凸包上的点然后求上凸壳和下凸壳,可以想象在y轴负无穷处有一个点,然后求凸包得到上凸壳,y轴正无穷有一个点,然后求凸包得到下凸壳单调栈代码解析convex函数,对a数组求凸包,求的结果存储在b数组中可以想象在y轴负无穷处有一个点,然后求凸包得到上凸壳,上凸壳加上y轴无穷远处的点,可以把内部
习题课5-2(最近点对、线段相交)
习题课5-2(最近点对、线段相交)最近点对给定n个二维平面的点,求距离最近的点对,并输出它们的距离分治子序列那道题,把序列分成两半,分别求解左右两边解法1分治算两边令solve(l,r)表示第l个点到第r个点的最近点对的距离solve(l,r) = min(solve(l,mid),solve(mid+1,r),cal(l,r,mid))mid = (l+r)>>1; call(l,r,mid)表示第一个点在(l,mid),第二个点在(mid+1,r)所得到的最近点
习题5-3(打牌问题、动态规划最大方案问题)
习题5-3(打牌问题、动态规划最大方案问题)纸牌给你n张牌,对手同样有n张牌所有的牌都互不相同每轮你和你的对手都打出一张牌牌的点数更小的获胜问你运气最好能获胜几轮分析n<=10^5怎么枚举不同的情况解法1我出一张牌,对方出一张牌,牌就没了可以用一张表格来表达流程,表格确定,比赛就比完了枚举完所有的表格,找到赢得最多的即为答案枚举我可能出的牌,枚举地方可能出的牌我的复杂度O(n!) 敌方O(n!)总共O((n!)^2)重要的是你的牌的对局对象,你这次牌第几轮打
习题课1-2(逆序对、哈希、哈夫曼树)
习题课1-2(逆序对、哈希、哈夫曼树)数字盒子维护一个集合S支持两种操作insert delete要求输出操作是否成功,操作次数5X10的5次方集合中元素不重复,使用一个bool数组记录每一个数是否出现过通过哈希函数把原数变小,对一个质数取余,但是并不是真的变小,而是作为原数的代号,代码实现Hash()vector<ll>::iterator ptr = table[h].end()删除时,没有进行元素的移动*ptr = tab
习题课1-3(并查集、BST)
习题课1-3(并查集、BST)等式第一行整数T,表示数据组数接下来会有T组数据,对于每组数据第一行是两个整数n,m,表示变量个数和约束条件个数接下来m行,每行三个整数a,b,e,表示第a个变量的和第b个变量的关系若e=0则表示第a个变量不等于第b个变量若e=1则表示第a个变量等于第b个变量将两个元素所在集合合并起来查询两个元素是否在同一个集合中注意e=1的操作要在e=0的操作之前解法1第i个元素所在集合ID(i)把=1的条件提到前面来
leetcode刷题奠基仪式
参考地址https://github.com/yuanguangxin/LeetCodehttps://blog.csdn.net/lingpy/article/details/88085446https://blog.csdn.net/CowBoySoBusy/article/details/82559651
周排行