POJ
文章平均质量分 86
Lanifer
这个作者很懒,什么都没留下…
展开
-
POJ 2342 Anniversary party(树形DP)
题目: 每个人有个rating值, 总rating值为在场的所有人的rating值之和,但有个要求: 每个人都不能和他的直接上司待在一起,问最大可能的rating值是多少? 分析: 所有人的关系构成了一棵树,我们可以用d[i]表示已i为根节点的子树的rating值之和。 节点i有两种决策: 选和不选。 如果选节点i,则问题转化为 i 的所有孙子rating值之和;若不选 i 则问题转原创 2013-10-10 16:56:25 · 648 阅读 · 0 评论 -
POJ 3342 Party at Hali-Bula(树形DP)
题目链接 相比POJ 2342那题,增加了一问:最佳选择是否唯一的. 首先可根据雇员与老板的关系建立一颗树,老板做根节点,雇员是该根节点的儿子。 如上面这棵简易的树,对于节点A有两种决策: 选与不选。 若选择A,则B 、C都不能选,问题转换为求所有以 “B、C的儿子为根节点的树” 子问题最优解之和。 若不选A, 则问题转换为求“以B、C为根节点"的子树的最优解之和。原创 2013-10-13 00:23:06 · 673 阅读 · 0 评论 -
POJ 1947 Rebuilding Roads
链接 不太容易得到状态方程及其转移, 花了好长时间理解。 dp[ i ][ j ] :从以 i 为根的子树中分离出 j 个联通的节点至少需要砍掉的边数(根节点必须保留,暂未考虑将 i 和它的父亲分离)。 初始化: dp [ i ][ j ] = INF ( j >=2 && j 再依次考虑每个 i 的儿子是否需要连接: 若不连, dp[ i ][ j ]不变 , 即d原创 2013-10-13 23:37:49 · 589 阅读 · 0 评论 -
POJ 1185 炮兵阵地
题目链接 推荐一篇博客,写的超好,很容易理解。 重贴代码: #include #include #include #include using namespace std; const int MAXR=110,MAXC=12,MAXS=65; int state[MAXS],soldier[MAXS],num; int mp[MAXR]; char MAP[MAXC]; i原创 2013-10-16 22:55:07 · 514 阅读 · 0 评论 -
POJ 2299 Ultra-QuickSort
题目连接 大意: 只允许交换相邻两个数的情况下,问最少需要多少步完成排序(升序)操作? 分析: 模拟,推理后发现,对于每个逆序对都需要1次交换操作。而且可以证明:最优情况下也只需要交换逆序对。 简单说明一下: ①每个逆序对必须至少对应一次交换操作。 ② 若当前没有逆序对,说明已经排好序了。 ③选择两个数A , B交换, 若A,B为顺序,交换后产生了新的逆序对,需要的操作数至少加一;原创 2013-10-23 23:39:30 · 564 阅读 · 0 评论 -
POJ 2374 Fence Obstacle Course(map优化DP)
题目链接 用下面这个图辅助说明 这题只需要从上到下按层 维护图中这些虚线即可。 例如当前需要在图中红栏杆处做决策时,需要把上面的三条虚线删除,而添加两端点处的新路径,路程当然要去上面三条路的最小值 。 代码: #include #include #include #include #include using namespace std; const int max原创 2013-11-10 16:45:38 · 726 阅读 · 0 评论 -
POJ 3709 K-Anonymous Sequence(斜率优化DP)
题目链接 学习了国家集训队员周源的这篇论文《浅谈数形结合思想在信息学竞赛中的应用》,很具启发性。受益颇多。 这题的一个简单的O(n^2)的DP是 dp[ i ] = min {dp[ j ] + sum[ i ] - sum[ j ] - ( i - j ) * a[ j+1 ] | i - j >= k } (sum[ i ]为前缀和) 。 直接这么做肯定TLE,重点是如何优原创 2013-11-11 01:30:59 · 1032 阅读 · 0 评论