
动态规划
文章平均质量分 64
sigd
这个作者很懒,什么都没留下…
展开
-
18942 偏爱字母
经验谈:初期学习时肯定会这种情况,看到算法题目,感觉不难,但又做不出来的情况。解决算法题目本质上是看出题目要考察的知识点,再编码实现。当一个问题出现时,可以先借鉴暴力枚举的思想,先思考下答案到底是什么?将问题转换成我们熟悉的形式。例如本题,求某个满足条件的子串,也就是求满足条件的区间。那么一定可以用暴力枚举的方式得到所有区间,再计算得到答案。这样就得到一个复杂度O(n^3)的算法。然后再考虑如何能优化这个问题,实际上此题目是最大子段和问题。解题思路:将F看成-1,E看成1,这样问题就转换成求区间..原创 2022-04-05 23:34:04 · 696 阅读 · 0 评论 -
1224:最大子矩阵
1224:最大子矩阵时间限制: 1000 ms 内存限制: 65536 KB【题目描述】已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1×11×1)子矩阵。比如,如下4×4的矩阵0 -2 ...原创 2018-09-28 09:52:36 · 7289 阅读 · 4 评论 -
1291:数字组合(一维数组dp算法)
1291:数字组合时间限制: 1000 ms 内存限制: 65536 KB提交数: 1711 通过数: 1000【题目描述】有n个正整数,找出其中和为t(t也是正整数)的可能的组合方式。如:n=5,5个数分别为1,2,3,4,5,t=5;那么可能的组合有5=1+4和5=2+3和5=5三种组合方式。【输入】输入的第一行是两个正整数n和t,用空格隔开,其中1≤n...原创 2019-02-19 10:43:04 · 1247 阅读 · 0 评论 -
18708 最大子段和
一个整数序列,选出其中连续且非空的一段使得这段和最大。注意当题目要求输入输出的数据量很大时,尽量使用scanf和printf。 c++提供的cin和cout速度比较慢,有可能在读取数据和输出数据时导致超时。输入格式第一行是一个正整数N,表示了序列的长度(0=<N<=200000)。第二行包含N个绝对值不大于10000的整数ai。输出格式一个整数,为最大的子段和。子段的最小长度为1。数据确保结果在类型int范围内。输入样例72 -4 3 -1 2 -4 3输出样例4知.原创 2022-03-09 22:59:27 · 1130 阅读 · 0 评论 -
背包算法简介
一、概述背包算法是最常见的一种DP算法。它的核心要素有三个:背包容量,物品重量,物品价值。 在不同的题目中这三要素可能表现为多种形式,比如背包容量是时间(P1048 采药),体力(P1510 精卫填海),数值(P1734 最大约数和)。物品重量和背包容量在同一题目中的概念是一致的。在物品价值方面,如果题目给了价值或者价值计算方法(P1060 开心的金明),那么我们写dp方程时按题目要求添加即可。如果没有给物品价值,只是让我们求能填充的最大容量或者求方案数,我们可以将dp数组的0号单元置1,dp[0]=1原创 2021-06-07 22:52:57 · 19700 阅读 · 0 评论