
动态规划
锋巅
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HDU1677 Nested Dolls
/*这是杭电1677那道题这算一道动态规划题,说起动态规划,不得不说背包九讲真是大牛呀,每次看都会有些收获这道题难点之一是将其转化为,求最长单调非递增子序列记得刚开始看到这道题的时候,没头没脑就开始了贪心,直接超时,稍微修改下wrong Anser不得不另辟蹊径我想起以前看过的一道题,说是河流两岸有许多村庄 ,南岸一些村庄与北岸(南北村庄个数相同,且只有唯一朋友原创 2013-03-19 19:38:52 · 889 阅读 · 0 评论 -
The Weight of Tree
http://acm.nyist.net/JudgeOnline/problem.php?pid=697这是我们比赛一道题,当时不会做说是给你n个节点的树,每个节点都有个权值,让你求出个子树的权值最大,树形dp,让我觉得只是道搜索 #include#include#include#includeusing namespace std;#define MAXN 1000原创 2013-05-03 11:30:18 · 798 阅读 · 0 评论 -
poj 1947
这一道题是树形dp,前段时间学习dp时,就想把树形dp给学了,当时不知从何下手,简单学了下依赖背包,就撤了,没怎么学树形dp。直到前几天我们做比赛,当我们遇到一道树形dp时,三个人没一个会的,三人对树形dp顶多是只有个概念吧。为了以后不那么悲剧,我决定还是学点树形dp吧。可是两三天只有一点点进步。废话不说了,说这道题。这道题是给你一个有n个节点树,要你保留p个节点,求删除的最少边数。dp[原创 2013-05-03 10:53:24 · 810 阅读 · 0 评论 -
逆序排列
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1020在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序数是4。1-n的全排列中,逆序数最小原创 2013-04-12 16:05:31 · 2293 阅读 · 0 评论 -
分组 背包
分组背包一、分组背包背包九讲上这样说的有N件物品和一个容量为V的的背包,第i件物品的费用为C[i],价值是w[i]。这些物品被划分为若干组,每组的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过物品的容量,且价值最大。大牛给出的状态转移方程为:f[k][v]=max(f[k-1][v],f[k-1][v-c[i]]+w[i])伪代码(1)fo原创 2013-03-27 21:15:13 · 834 阅读 · 0 评论 -
取方格(1)
http://acm.hdu.edu.cn/webcontest/contest_showproblem.php?pid=1012&ojid=0&cid=4272&hide=1&problem=Problem%20%20L给你一个n*n的格子的棋盘,每个格子里面有一个非负数。从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的和最原创 2013-04-09 20:05:42 · 1152 阅读 · 0 评论 -
RMQ(区间最大值)
区间中最大的数本来这篇不想写了,但是由于今天心情不够好,也就写了。区间最大值,这一算法速度还算可以,主要用于对此查询,i,j之间的最大值,原数组,没发生变化,这个算法,主要有两个函数组成,RMQ和查询函数,max[i][j]表示的是从i开始到i+2^j-1区间的最大值,所以状态转移方程为maxnum[i][j]=max(maxnum[i][j-1],maxnum[i+(1这个就原创 2013-03-26 10:47:53 · 1178 阅读 · 0 评论 -
简单动态规划集(五)
最长公共子序列给两个字符串,让你求最长公共子串这也是个简单的动态规划,用二维的更容易理解当str1[i]=str[j]c[i][j]=c[i-1][j-1]+1否则c[i][j]=max(c[i-1][j],c[i][j-1])用一维可以省内存只需记录下需要的c[i]就行了 #include#include#define N 1006int c[N];ch原创 2013-03-25 16:42:01 · 668 阅读 · 0 评论 -
简单动态规划集(四)
背包九讲是大牛的杰作,既然加了加了简单,那我只好简单说下背包前四讲背包的第一讲01背包它是最简单的背包,也是背包系列的根基,说是给一个背包,n件物品,每件有价值和费用c ,w问你的背包最多能装多大的价值for(i=V;i>=c[i];i--)dp[i]=max(dp[i],dp[i-c[i]]+w[i]);循环之所以从前往后是为了保证一件物品只装一次。完全背包给你的原创 2013-03-25 16:31:29 · 705 阅读 · 0 评论 -
简单动态规划集(三)
最长单调递增子序列最长单调子序列,最简单的方法,去一个一个去数代码大概如下for(i=0;ifor(j=i+1;jif(num[j]>num[i])a[j]=max(a[j],a[i]+1);大概就是这样,没什么难理解,想必没几个人会满足于这个,当然在某些情况下,这个算法,是很有用的,它的用途更多的会在程序某个部分中。现在咱们去找个稍微好些的方法,复杂度nlogn,原创 2013-03-25 14:29:28 · 852 阅读 · 0 评论 -
简单动态规划集(一)
动态规划:两大属性1、最优子结构 2、无后效性动态规划是求最优解的一种方法,没什么固定模式,但在某种程度又有很大的相似性几个名词:状态、状态转移、决策以上就是我对动态规划的一些粗浅理解这里我把以前学的简单动态规划,列举下来以供一些入门者学习数塔问题题意:一个高度为N的由正整数组成的三角形,从上走到下,求经过的数字和的最大值。每次只能走到下一层相邻的数上由于只可以原创 2013-03-25 10:36:38 · 731 阅读 · 0 评论 -
简单动态规划集(六)
石子合并(任意性)有n堆石子,需要把他们合并成一堆,合并花费的代价为两堆石子的个数之和这个是哈弗曼编码,也就是贪心,不在此类之中,也比较好做石子合并(直线型)点击打开链接题意:N堆石子摆成一条线。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价。计算将N堆石子合并成一堆的最小代价。我们需要记录一下,贪心在这里已经原创 2013-03-25 16:56:51 · 724 阅读 · 0 评论 -
炮兵阵地
炮兵阵地本周本来要学习状态压缩dp,太悲剧,一直到周五才有所突破。之所以选择这道题,因为大家说这道是入门题也是经典题。在做这道之前,准确的说在抄这道题之前,我向一同学问状态压缩一些问题(这样做是为了节省自己的学习时间),他首先给我推荐一道HDU3006,让我有个状态压缩的概念,很好,学习学习A了,但我接下来的学习就惨了。我喜欢搜一大堆博客,先浏览一下,然后再找一篇,自己可能看得懂的代码,去原创 2013-04-05 20:23:36 · 739 阅读 · 0 评论 -
简单动态规划集(二)
最大子串和题意:给定一整型数列{a1,a2...,an},找出连续非空子串{ax,ax+1,...,ay},使得该子序列的和最大,其中,1对于这道题我们最简单的思路,把所有子串都找出来,然后找个最大的,如果我们真的这样做了,复杂度有点高,难度有点大了我们这样想一下,这个子串是连续的,我们这样想一下如果,一段子串和小于0,我们回去要吗?答案是否定的,我们坚决不要那这样就好了,我们原创 2013-03-25 14:06:02 · 668 阅读 · 0 评论 -
HDU Consumer
Consumer这一题我一见,就感觉它是依赖背包,自己好不容易写好了,提交果断超时,这一超时,直接让我的思维陷入了混乱,没办法,只好求助于同学,只用了个01背包,我是这样理解的,也就是每个状态对应每箱做装与不装选择代码如下,代码最好立即#include#include#include#includeusing namespace std;#define MAXV 100008原创 2013-04-02 19:32:42 · 812 阅读 · 0 评论 -
HDU 2196 树形dp
题目的大意就是要你求出每个节点到叶子节点的最远距离这道题两次搜索,求出最大值,记录一个最大值一个次大值,便于更新#include#include#include#includeusing namespace std;#define MAXN 10008typedef struct{ int to,next,len;} E;E edge[2*MAXN];int h原创 2013-05-03 19:59:55 · 734 阅读 · 0 评论