
动态规划
文章平均质量分 53
傲节
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LIS最长上升子序列O(n^2)&O(nlogn)
#include<iostream> #include<cstring> #include<string> #include<cstdio> #include<cmath> #include<algorithm> #include <set> #include <map> #include<list> #include <stack> #include <queue> #include <vecto原创 2016-04-07 21:52:36 · 404 阅读 · 0 评论 -
矩阵取数
给定一个m行n列的矩阵,矩阵每个元素是一个正整数,你现在在左上角(第一行第一列),你需要走到右下角(第m行,第n列),每次只能朝右或者下走到相邻的位置,不能走出矩阵。走过的数的总和作为你的得分,求最大的得分。 初看此题,你的思路是什么? (1) 贪心? 先走到大的数再说?看这个例子: 无论你以什么方式走到3,总和都是1 + 1 + 3 + 1 + 1 + 1 + 1 =原创 2016-04-27 12:43:01 · 6562 阅读 · 1 评论 -
最大子矩阵之和
分析: 我们已经解决了一维的问题(基础篇中的最大子段和问题),现在变成二维了,我们看看能不能把这个问题转化为一维的问题。最后子矩阵一定是在某两行之间的。假设我们认为子矩阵在第i行和第j列之间,我们如何得到i和j呢,对,枚举。 枚举所有1 我们把每一列第i行到第j行之间的和求出来,形成一个数组c,于是一个第i行到第j行之间的最大子矩阵和对应于这个和数组c的最大子段和。于是,我们的算法变为原创 2016-05-11 15:32:18 · 548 阅读 · 0 评论 -
编辑距离
题目51NOD1183AC代码#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std;int dp[1001][1001]; char s[1001],t[1001]; int same(int i,int j) { if(s[i]==t[j])return 0原创 2016-05-05 00:46:32 · 334 阅读 · 0 评论 -
最长上升子序列
(LIS Longest Increasing Subsequence)给定一个数列,从中删掉任意若干项剩余的序列叫做它的一个子序列,求它的最长的子序列,满足子序列中的元素是单调递增的。 例如给定序列{1,6,3,5,4},答案是3,因为{1,3,4}和{1,3,5}就是长度最长的两个单增子序列。 处看此题,怎么做? 万能的枚举?枚举全部2^n个子序列,找出最长的,固然可以,就是复杂度原创 2016-05-05 15:09:14 · 357 阅读 · 0 评论 -
循环数组最大子段和
题目N个整数组成的循环序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续的子段和的最大值(循环序列是指n个数围成一个圈,因此需要考虑a[n-1],a[n],a[1],a[2]这样的序列)。当所给的整数均为负数时和为0。 例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。分析:(1)笨方法,我们可以用普通最大子段和原创 2016-05-22 15:36:16 · 548 阅读 · 0 评论 -
0-1背包
有n件物品,第i件物品(I = 1,2,3…n)的价值是vi, 重量是wi,我们有一个能承重为m的背包,我们选择一些物品放入背包,显然放入背包的总重量不超过m。我们要求选择物品的总价值最大,请问如何选择?这里我们假设所有出现的数都是正整数。 第一想法是? (1) 枚举?万能的枚举啊。但对于n件物品,每件都可以选择取或者不取,总的可能性有2n, n = 30就大约已经有10亿种可能了!原创 2016-05-22 18:32:53 · 337 阅读 · 0 评论