随笔分类 -  动态规划

刘汝佳uva动态规划专题
摘要:题意: 有很多个箱子,想买箱子中的物品必须先买下箱子 思路: 依赖背包,实际的操作过程中依然需要注意几个点:01背包的时候,背包容量是由max-p到ci,而非max到p+ci。 至于为什么,因为后一种则就是表示每个物品代价是p+ci,而非ci了,所以此时就会计算错误 阅读全文
posted @ 2012-11-08 23:10 kedebug 阅读(264) 评论(0) 推荐(0)
摘要:题意: 一棵树,每个节点有一个权值,求从根节点出发,最多走K步,能够取得的最大权值(可以往回走)。 思路: dp[0][u][j] 从u节点出发,最多走j步(可以小于j步),可以获得的最大权值。 dp[1][u][j] 从u节点出发,最多走j步,最终停留在u的子树节点,可以获得的最大权值。 阅读全文
posted @ 2012-11-08 21:29 kedebug 阅读(303) 评论(0) 推荐(0)
摘要:思路: 看完背包9讲,感觉这一题还是不难理解的。首先,对于没有组的限制的X类物品,进行一遍背包(01背包、完全背包、多重背包)。 其次,对于有组的限制的物品,就需要再次考虑下了。这次要用到泛化背包和分组背包的思想。每一组只能选择组里面的一类物品。 于是试图考虑,如果我分给这个组V(range from 0 to D)的容量,能够最多拿到多少价值。因为这个组有X类物品,只能选择一类, 所以需要先对这个组的每一类物品进行一次01背包,获得分配给这类物品V的容量取得的最大价值,然后再对这个组的X类物品进行分组背包。 最后,针对上述组进行一次分组背包,问题得以解决。 阅读全文
posted @ 2012-11-08 17:18 kedebug 阅读(418) 评论(0) 推荐(0)
摘要:给你一个数N(1=N=1000),求这么N有多少个不同的旋转长度。旋转长度是指,一个数最少经过多少步可以回到原来的数。例如N=6时,假如123、45、6分别为三个旋转周期,则旋转顺序为:123456,312546, 231456, 123546, 312456, 231546,123456,旋转长度为6。当然你也可以12,34,56旋转周期,旋转长度为2。 阅读全文
posted @ 2012-11-04 15:07 kedebug 阅读(245) 评论(0) 推荐(0)
摘要:就题目来说还是属于比较常规的分组DP,处理点与点之间的关系稍微麻烦点,借鉴了网上结构体重载的方法 阅读全文
posted @ 2012-11-04 01:05 kedebug 阅读(312) 评论(0) 推荐(0)
摘要:很好的树形DP题目 阅读全文
posted @ 2012-11-03 22:08 kedebug 阅读(245) 评论(0) 推荐(0)
摘要:和普通的分组DP还是有点差别的,要求背包容量固定的变化,而非1->V之类的 现在渐渐理解分组背包,1. 每组最多选择一个 2. 每组选择一个 ,这两类的差别就是在与dp数组的初始化问题 阅读全文
posted @ 2012-11-03 19:32 kedebug 阅读(389) 评论(0) 推荐(0)
摘要:HDOJ 3496 基本二维背包 阅读全文
posted @ 2012-11-03 00:03 kedebug 阅读(229) 评论(0) 推荐(0)
摘要:此题很好,很费脑力,还好以前把背包9讲看完了,这次容易理解点 阅读全文
posted @ 2012-11-02 23:01 kedebug 阅读(359) 评论(0) 推荐(0)