摘要: DescriptionThere is a worker who may lack the motivation to perform at his peak level of efficiency because he is lazy. He wants to minimize the amount of work he does (he is Lazy, but he is subject to a constraint that he must be busy when there is work that he can do.)We consider a set of jobs 1, 阅读全文
posted @ 2013-11-30 19:27 SangS 阅读(335) 评论(0) 推荐(0) 编辑
摘要: BTW:刚在图书馆借了本算法艺术与信息学竞赛. 我多次有买这本书的冲动, 但每次在试看之后就放弃了, 倒不是因为书太难, 而是写的实在是太差. 大家对这本书的评价很高, 我觉得多是因为书的内容, 而作者表达内容与思想的方式真是令我恼火. programmer 写博客, 尤其是技术博客, 往往不去考虑读者的起点, 结果博客都成了自己给自己看的地方. 报纸杂志都属于通俗易懂的材料, 不需要假定读者的水平如何. 而写书, 则必须要好好考虑读者的水平. 单说算法书, 全世界的算法书加起来也得有个上千本, 但是能称为经典的屈指可数, 而经典书的作者在写书时必然仔细考虑了所面向的读者, 读者的水平和读者所 阅读全文
posted @ 2013-11-30 16:31 SangS 阅读(324) 评论(0) 推荐(0) 编辑
摘要: DescriptionThe CE digital company has built an Automatic Painting Machine (APM) to paint a flat board fully covered by adjacent non-overlapping rectangles of different sizes each with a predefined color.To color the board, the APM has access to a set of brushes. Each brush has a distinct color C. Th 阅读全文
posted @ 2013-11-30 13:32 SangS 阅读(421) 评论(0) 推荐(0) 编辑
摘要: DescriptionThe cow bicycling team consists of N (1 = d, 不管第 i 头牛怎么跑, 只要它跑了 d 圈, i+1 头牛就耗费了 d 的能量.dp[i+1][d][d] 是对第 i+1 头牛进行初始化, 在代码中也可以看出, 第 i 头牛更新第 i+1 头牛的dp[][][]总结:1. 每头牛, 自己跑的时候使用了一次 dp, 牛与牛之间又使用了一次 dp2. 递推关系仅建立在相邻的两头牛之间, 后面一头牛继承前面那头牛的最小时间代码:#include using namespace std;const int INF = 0X3F3F3F3 阅读全文
posted @ 2013-11-29 23:37 SangS 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 思路:1. 算法导论讲 divide and conquer 时, 讲到过这个例子. 书中的做法是先让 price 数组减去一个值, 然后求解最大连续子数组的和. 分治算法的复杂度为 o(nlogn)2. 剑指 offer 来给出最大连续子数组和的动态规划做法, 时间复杂度缩小到 o(n)3. 此题不必转化为最大连续子数组和问题, 可以直接使用动态规划解法(我不知道如何转化). 假设 dp[i] 表示第 i 天把股票卖出获得的最大收益, 那么可以根据 price[i] 和 price[i-1] 之间的关系可以推出 dp[i] 与 dp[i-1] 的关系if(prices[i] > pri 阅读全文
posted @ 2013-11-29 11:07 SangS 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 简单模拟代码:#include #include using namespace std;class Solution {public: bool isAlpha(char &in) { if(in >= 'a' && in = 'A' && in = '0' && in <= '9') return true; return false; } bool isPalindrome(string s) { int l = 0, h = s.size()-1; boo 阅读全文
posted @ 2013-11-28 22:58 SangS 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 题意: 阅读全文
posted @ 2013-11-28 22:40 SangS 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 思路:1. 每个板子有左右两端, dp[i][0], dp[i][1] 分别记录左右端到地面的时间2. 从下到上递推计算, 上一层的板子必然会落到下面的某一层板子上, 或者地面上总结:1. 计算每个板子的 dp[i][0/1] 仅需考虑该板子的直接前驱即可2. 动规的思想并不很明显3. 代码中, 两个板子相对位置的判断特别精髓4. 将地面和初始状态都抽象成一块板子代码:#include #include using namespace std;class board {public: int x1, x2, h; board(int _x1, int _x2, int _h):x1(_x1), 阅读全文
posted @ 2013-11-28 11:24 SangS 阅读(230) 评论(0) 推荐(0) 编辑
摘要: DescriptionThere is a straight highway with villages alongside the highway. The highway is represented as an integer axis, and the position of each village is identified with a single integer coordinate. There are no two villages in the same position. The distance between two positions is the absolu 阅读全文
posted @ 2013-11-28 11:22 SangS 阅读(542) 评论(0) 推荐(0) 编辑
摘要: 题意:一棵树, 树上的节点都有 value, 节点之间的 cost 为1, 从树根开始走, 给定最大 cost K, 求解所能得到的最大 value思路:1. 树形 DP2. 我起初认为这是 hdoj 鬼吹灯 的简化版本, 后来才发现鬼吹灯是 apple tree 的简化版本. 具体来说,鬼吹灯中一个根节点的孩子节点没有依赖关系, 可以以任意的顺序遍历孩子节点, 状态转移方程可以设计的比较简单, 而这道题则不然, 至于原因, 可以看 (3)3.8 42 1 4 3 3 2 4 11 2 1 31 42 52 63 73 8在 poj 的 discuss 上找到一个上面那个案例, 才意识到状态转 阅读全文
posted @ 2013-11-26 13:42 SangS 阅读(386) 评论(0) 推荐(0) 编辑