![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 73
longxuan01
这个作者很懒,什么都没留下…
展开
-
动态规划---(递推3,放置方案数,方格取数)
现在有 k 种颜色的小球,每一种颜色的小球有若干个,有 n 个盒子排成一排,现在要往盒子里放球,每一个盒子需要放 1 个小球,要求相邻的盒子之间最多只有 2 个连续颜色相同的小球,问你有多少种方案,由于答案很大,请你对 10^9+7 取模。样例 2 中的 6 种方案如下:[1,1,2],[1,2,1],[1,2,2],[2,1,1],[2,1,2],[2,2,1]②相同:前面的dp[i-1][0]有26种方案,刚好满了,不需要+dp[i-1][1]了,所以可以直接等于dp[i-1][0]原创 2024-05-01 22:24:31 · 12 阅读 · 0 评论 -
动态规划--(递推2(最长上升子序列,格子染色,斐波那切数列,奇数塔问题,最长子段和))
这样说还是有点抽象,举个例子,比如我要求前i个数的最长上升子序列,那么小于a[i]的数有a[v1],a[v2],a[v3]这三个,而dp[i]就是dp[v1]+1,dp[v2]+1,dp[v3]+1,dp[i](因为前三个的最大值可能小于dp[i],所以也要加上,但是这是不可能的事,不过为了后面的统一还是加上)的最大值,所以状态转移方程是dp[i]=max(dp[i],dp[k]+1)(k为小于i大于0的自然数)。的时候,我们称这个序列是上升的。你的任务,就是对于给定的序列,求出最长上升子序列的长度。原创 2024-03-30 13:41:11 · 884 阅读 · 0 评论 -
1258:【例9.2】数字金字塔-----动态规划(递推)1
首先我们想得到答案必须经过最后一层的筛选,最后一层的每个数都是加上自己再加上上一层达到的最大值的,所以对于最后一层的每一个点向上推,到达上一层后,上一层的每个数也都是加上自己后再加上一层过来的最大值过来的……最后推到最顶层,这时我们就能根据规律再反推得到答案。而这种思路就是动态规划–递推。首先解这道题我们第一眼想到是不是暴力,但是暴力的话是O(n!)的时间复杂度,很明显,会超时。不如我们把他分成若干子问题把,就像分治那样。那么很明显了,根据上一段的规律我们能写出代码。最后大家如果不了解dp,可以点这里。原创 2024-03-16 22:55:28 · 440 阅读 · 0 评论 -
dp动态规划的基本
在平时刷题的过程中,总会有一些题目让人无法下手,比如什么最长上升子序列,最长公共子序列,01背包…当你去了解它时,你会知道它们叫一个统一的名字 ----动态规划(dp),这是什么东西?,规划动态的东西?动态规划到底是何方神圣呢?动态规划算法有什么用呢?这些问题在这篇文章我都会为你解答。原创 2024-03-16 22:53:35 · 437 阅读 · 0 评论 -
二分/二分查找(整数二分详解+拓展浮点二分)
先上题目在一个有序数组中,查找x所在的下标。输入第一行两个整数n和m。第二行n个数,表示有序的数列。接下来m行,每行一个整数x,表示一个询问的数。输出对于每个询问如果x在数列中,输出下标。否则输出-1样例输入 15 33 4 5 7 9738输出 141-1提示对于100%的数据n和m的范围[0,10^5];x和数列中的元素范围[-10^6, 10^6];数列中的任意两个元素都不相同。原创 2024-03-16 18:39:47 · 872 阅读 · 0 评论