摘要:
先按照一维排序,然后在第二维求最大上升子序列。注意比较的时候还要考虑第一维虽然排序,还是有可能相等的。bool comp(const Box &a, const Box &b) { if (a.vol != b.vol) { return a.vol &boxes) { sort(boxes.begin(), boxes.end(), comp); int size = boxes.size(); int max = 0; vector dp(size); for (int i = 0; i dp[i]) dp[i] = dp[j]; ... 阅读全文
posted @ 2014-01-21 22:41
阿牧遥
阅读(233)
评论(0)
推荐(0)
摘要:
http://www.itint5.com/oj/#28这题有意思。一开始还想不清楚,看了解释,很棒。这个题目的特殊之处是所有节点的值都是不一样的. 所以递归过程可以大大简化. 先看两种遍历的性质:pre-order: root, left *************, right #########post-order: **************left, ########right, root所以 pre-order 的第一个元素一定等于 post-order 的最后一个元素. 然后在post-order中由前往后找, 找出等于pre-oder中第二个元素的位置, 也就是 left 的 阅读全文
posted @ 2014-01-21 21:58
阿牧遥
阅读(265)
评论(0)
推荐(0)
摘要:
http://www.itint5.com/oj/#27用了基于stack的中序遍历,记录一下last,就很简单了。#include /*树结点的定义(请不要在代码中定义该结构)struct TreeNode { TreeNode *left, *right; bool isLeftThread, isRightThread;}*/void convertToThreadedTree(TreeNode *root) { stack stak; TreeNode *n = root; TreeNode *last = NULL; while (n != NULL ||... 阅读全文
posted @ 2014-01-21 21:21
阿牧遥
阅读(263)
评论(0)
推荐(0)

浙公网安备 33010602011771号