上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 37 下一页
摘要: 使用动态规划方法解题,对于不少问题之所以具有较高的时间效率,关键在于它减少了“冗余”。所谓“冗余”,就是指不必要的计算或重复计算部分,算法的冗余程度是决定算法效率的关键。动态规划在将问题规模不断缩小的同时,记录已经求解过的子问题的解,充分利用求解结果,避免了反复求解同一子问题的现象,从而减少了冗余。 阅读全文
posted @ 2017-09-14 14:45 Aragaki 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 最长路: 设置一个虚拟起点和虚拟终点,每个点与起点间一条负边,值为这个点书的价值的相反数(代表买书花钱),每个点与终点连一条正边,值为这个点的书的价格(代表卖书赚钱)。 然后按照图中给的边建无向边,权值为负(代表路费)。跑最长路,spfa改一下松弛条件就行 树形DP: 设1为根节点,假设一开始一个人 阅读全文
posted @ 2017-09-14 14:18 Aragaki 阅读(342) 评论(0) 推荐(0) 编辑
摘要: 2、最大子矩阵和问题 (1)问题描述:给定一个m行n列的整数矩阵A,试求A的一个子矩阵,时期各元素之和为最大。 (2)问题分析: 用二维数组a[1:m][1:n]表示给定的m行n列的整数矩阵。子数组a[i1:i2][j1:j2]表示左上角和右下角行列坐标分别为(i1,j1)和(i2,j2)的子矩阵, 阅读全文
posted @ 2017-09-14 13:43 Aragaki 阅读(423) 评论(0) 推荐(0) 编辑
摘要: 最大字段和 O(N) 阅读全文
posted @ 2017-09-14 13:37 Aragaki 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 给定n个数字,求其中m段的最大值(段与段之间不用连续,但是一段中要连续) 例如:2 5 1 -2 2 3 -1五个数字中选2个,选择1和2 3这两段。 dp[i][j]从前j个数字中选择i段,然后根据第j个数字是否独立成一段,可以写出 状态转移方程:dp[i][j]=max(dp[i][j-1]+n 阅读全文
posted @ 2017-09-13 23:21 Aragaki 阅读(183) 评论(0) 推荐(0) 编辑
摘要: n个人拿K个钥匙中的n个然后到办公室(点p) 问最少需要的时间是多少 先排序 如果j<=i 则必须拿这个钥匙 反之 则可以选择拿或者不拿 阅读全文
posted @ 2017-09-13 17:22 Aragaki 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 数组是最常用的数据结构之一,现在我们对数组的下标进行特殊处理,使每一次操作仅保留若干有用信息,新的元素不断循环刷新,看上去数组的空间被滚动地利用,此模型我们称其为滚动数组。其主要达到压缩存储的作用,一般常用在DP类题目中。因为DP题目是一个自下而上的扩展过程,我们常常用到是连续的解,而每次用到的只是 阅读全文
posted @ 2017-09-13 17:16 Aragaki 阅读(1316) 评论(1) 推荐(1) 编辑
摘要: #include #include #include #include using namespace std; const int size = 100010; int maxx[size][32],minn[size][32]; int n; void init() { int k = log2(n); for(int j = 1;j <= k;j ++) { ... 阅读全文
posted @ 2017-09-12 21:59 Aragaki 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 2.1 查找第一个与key相等的元素 查找第一个相等的元素,也就是说等于查找key值的元素有好多个,返回这些元素最左边的元素下标。 2.2 查找最后一个与key相等的元素 查找最后一个相等的元素,也就是说等于查找key值的元素有好多个,返回这些元素最右边的元素下标。 2.3 查找最后一个等于或者小于 阅读全文
posted @ 2017-09-12 20:12 Aragaki 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 无向图 有向图 阅读全文
posted @ 2017-09-12 17:21 Aragaki 阅读(151) 评论(0) 推荐(0) 编辑
上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 37 下一页