![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 85
_Zhouk
zhouy
展开
-
动态规划:背包问题
一:多阶段动态规划问题 一类动态规划可解的问题,它可以描述成若干个有序的阶段,且每个阶段的状态只和上一个阶段的状态有关。这类问题称为多阶段动态规划问题。 二:01背包问题 01背包问题是这样的: 有n件物体,每件物品的重量为w[i],价值为c[i]。现有一个容量为V的背包,问如何选取背包物品放入背包,使得背包内物品的总价值最大。没件物品都只有1件。 样例: 5 8 //n ==5,v ==8 3 5 1 2 2 //w[i] 4 5 2 1 3 //c[i] 如果采用暴力枚举每一件物品放原创 2021-03-28 12:37:12 · 112 阅读 · 0 评论 -
动态规划问题:最大连续子序列和
给定一个数字序列A1,A2,…,An,求i,j(1<=i<=j<=n),使得Ai+…+Aj最大,输出这个最大和。 样例: -2 11 -4 13 -5 -2 显然11+(-4)+13=20为和最大的选取情况,因此最大和为20。 使用暴力法来解决这个问题,枚举左端点和右端点(即枚举i,j)需要O(n ^2)的复杂度,而计算A[i]+…+A[j]需要O(n)的复杂度,所以总复杂度为O(n ^3)。 动态规划的做法:复杂度为O(n)。 步骤1:令状态dp[i]表示以A[i]作为末尾的连续.原创 2020-12-11 00:38:57 · 335 阅读 · 0 评论 -
动态规划
动态规划是一种非常精妙的算法思想,它没有固定的写法,极其灵活,常常需要具体问题具体分析。(整理自《算法笔记》) 什么是动态规划:动态规划是一种用来解决一类最优问题的算法思想。简单来说,动态规划是将一个复杂的问题分解成若干个子问题,通过综合子问题的最优解来得到原问题的最优解。需要注意的是,动态规划会将每个求解过的子问题的解记录下来,这样当下一次碰到同样的子问题时,就可以直接使用之前记录的结果,而不是重复计算。 一般使用递归或者递推的写法来实现动态规划,其中递归写法在此处又称为记忆化搜索。 动态规划的递归写法原创 2020-12-10 04:13:52 · 324 阅读 · 0 评论 -
排序 一
东西忘了好多,重新来过。 今天搞排序。算是三个比较简单的吧。 1,选择排序:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 代码的实现:#include<stdio.h> main() { int i,min,t,j; int num...原创 2018-03-25 01:51:01 · 284 阅读 · 0 评论