数据结构--动态规划
无心流泪
这个作者很懒,什么都没留下…
展开
-
求最大字段和的学习心得
测试样例10-2 11 -4 13 -5 2 5 15 4 -1输出41 1 8一下给出一种求最大字段和的完整程序首先输入一个整数n 表示有n个数的序列然后输入n个数之后输出n个数的最大字段和是多少,并且输出左右端位置以下三种解法复杂度分别是O(n^3) O(n^2) O(n)#includeint a[100];int max,start,end,n原创 2013-05-30 19:31:24 · 1062 阅读 · 0 评论 -
最长公共子序列问题(不要求连续)
下面这篇文章介绍一下在算法设计中动态规划的最长公共子序列的问题。最长公共子序列问题所谓,也即是分别给出长度为n和m的字符串A,B,然后找出其中最长公共子序列的最优值和最优解。所谓最优值,也就是求出这个最长公共子序列的长度;而最优解,就是要求出这个最长最长公共子序列是什么的问题。给个不太恰当的例子:我们中学数学中经常会遇到求函数最值的问题,比如说求出函数 f(x) 的最大值,那么这个最大值就原创 2014-04-03 00:13:58 · 2705 阅读 · 0 评论 -
uestc oj 1857 Choosing Capital for Treeland
这个题目让我学会了一个道理,有时候不知道开多大的数组,往往使劲往大了开,于是乎出现了。。。。。is too large 这样的错误(其实开的数组连一半都用不完)当出现这个情况的时候就可以使用C++STL当中的vector来开数组,这样的话就可以实现动态的分配,避免出现这个错误的。这个题目运用记忆化搜索解答#include#include#include#d原创 2013-06-11 00:56:33 · 871 阅读 · 0 评论 -
uestc oj 1690 最少花费
最少花费其实这个题目跟我要长高很像的,都是需要用单调队列优化dp来解决的只是这个题目多了一个条件山与山之间的高度差不能超过k状态规划方程 dp[i][x]=min(dp[i-1][y]+A*abs(x-y)+(hill[i]-x)^2)也是分高于前一座山还是低于前一座山来进行计算的只是在队列node里面要加一个index来记录这个山是有多高的 value用来记录 单调统原创 2013-06-11 00:56:07 · 891 阅读 · 0 评论 -
uestc oj 1510 Weights and Measures
转自:http://blog.csdn.net/wangtaoking1/article/details/7338191题目:http://acm.uestc.edu.cn/problem.php?pid=1510[cpp] view plaincopyWeights and Measures Time Li转载 2013-06-11 00:57:07 · 1490 阅读 · 0 评论 -
uestc oj 1500 AreYouBusy
这个题目是属于混合背包http://www.cnblogs.com/ACMan/archive/2012/08/13/2637022.html 经典混合背包 题目给了很多类别的物品。用 数组dp[i][j],表示第i组,时间为j时的快乐值。每得到一组工作就进行一次DP,所以dp[i]为第i组的结果。 第一类,至少选一项,即必须要选,那么在开始转载 2013-06-11 00:57:46 · 765 阅读 · 2 评论 -
uestc oj 1685 我要长高
这是一道动态规划的dp问题但是明显需要O(n^3)的时间复杂度 ,显然需要进行优化,并且有明显的可以进行单调队列优化的特征,在本次确定高度之后,总能在前一次当中寻找到一个最优解。最优解当然是由上一次的积累量+本次积累量(其中上一次的积累量与本次的积累量之间无关联)就是说dp[i-1][k]的积累量只是与k有关 dp[i][j]的积累量至于j有关由本次状态转移方程dp原创 2013-06-11 00:53:48 · 1940 阅读 · 0 评论 -
uestc oj 1500 AreYouBusy (2)
AreYouBusy 好像是一个背包问题 一共有三类物品 dp[i][j] 表示的是第i组,时间为j的最大快乐值 每得到一组工作就进行一次DP 第一类 至少选一项 状态方程 dp[i][j]=max(dp[i][j],max(dp[i][j-w[x]]+p[x],dp[i-1][j-time[x]]+happ[x])); dp[i-1][j-ti原创 2013-06-11 00:55:57 · 756 阅读 · 0 评论 -
o-1背包问题
给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大?物品个数n=5,物品重量w[n]={0,2,2,6,5,4},物品价值V[n]={0,6,3,5,4,6}, 包的体积是10输入5 102 62 36 55 44 6输出15#include#include#define原创 2013-05-31 00:25:09 · 1290 阅读 · 0 评论 -
01背包问题
http://blog.csdn.net/jiahui524/article/details/6656342问题描述:有N件物品和一个容量为V的背包。第i件物品的重量是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。 问题特点:每种物品仅有一件,可以选择放或不放。(0:不放 1:放)转载 2013-05-31 00:01:01 · 835 阅读 · 0 评论 -
数字三角形
#includeint a[100][100];int dp[100];int row;int main(){ freopen("1.txt","r",stdin); while(scanf("%d",&row)==1) { int i,j; for(i=1;i<=row;i++) for(j=1;j<=i;j++)原创 2013-05-30 21:54:08 · 857 阅读 · 0 评论 -
最长公共子串要求连续
http://blog.csdn.net/hackbuteer1/article/details/6686931参阅了上面的博客这个问题其实是不连续问题的子问题#include#includeint longest_common_substring(char *str1, char *str2){ int i,j,k,len1,len2,max,x,y; l原创 2014-04-03 00:38:37 · 1017 阅读 · 0 评论