11 2013 档案
摘要:Description司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示:如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。图上其它白色网格均攻击不到。从图上可见炮兵的攻击范围不受地形的影响。现在,将军们规划如何部署炮兵部队,在防止误伤的前提
阅读全文
摘要: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,
阅读全文
摘要:BTW:刚在图书馆借了本算法艺术与信息学竞赛. 我多次有买这本书的冲动, 但每次在试看之后就放弃了, 倒不是因为书太难, 而是写的实在是太差. 大家对这本书的评价很高, 我觉得多是因为书的内容, 而作者表达内容与思想的方式真是令我恼火. programmer 写博客, 尤其是技术博客, 往往不去考虑读者的起点, 结果博客都成了自己给自己看的地方. 报纸杂志都属于通俗易懂的材料, 不需要假定读者的水平如何. 而写书, 则必须要好好考虑读者的水平. 单说算法书, 全世界的算法书加起来也得有个上千本, 但是能称为经典的屈指可数, 而经典书的作者在写书时必然仔细考虑了所面向的读者, 读者的水平和读者所
阅读全文
摘要: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
阅读全文
摘要: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
阅读全文
摘要:思路: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
阅读全文
摘要:简单模拟代码:#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
阅读全文
摘要:思路: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),
阅读全文
摘要: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
阅读全文
摘要:题意:一棵树, 树上的节点都有 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 上找到一个上面那个案例, 才意识到状态转
阅读全文
摘要:思路:简单搜索总结:1. 第一次做的时候忘记加 visited 数组了2. 做完 kedebug 的搜索题, 简单搜索问题都变得像小绵羊一样温顺了3. 还是 dfs 框架. 书上所写的 dfs 框架, 一般由 DFS, dfs 两个函数拼成, DFS 负责接收参数和变量初始化, dfs 负责一般情况下的遍历. 两个函数连用比仅用一个 dfs 要好的多, 因为减少了很多判断语句. 下面的代码, 相当于 DFS+ dfs.代码:#include #include #include using namespace std;const int MAXN = 200;bool visited[MAXN]
阅读全文
摘要:思路:简单搜索总结:dfs 框架1. 需要打印路径. 在 dfs 函数中假如 vector 变量, 不用 & 修饰的话就不需要 undo2. 不需要打印路径, 可设置全局变量 ans, 在 dfs 函数中对 ans 判定, 判定的位置尽可能的多3. 对 tree 遍历, 有两种办法, 第一种是 if(root == NULL) 第二种是 if(root->left == NULL), 我一般用第二种, 效率比较高, 但是在第二种 return 1, 第一种 return 04. Leetcode 给出的测试用例经常会有空的输入, 要注意5. path sum 中树节点的 val
阅读全文
摘要:思路:二分法总结:ull != int * int代码:#include using namespace std;class Solution {public: int sqrt(int x) { unsigned long long l = 0, r = x, mid; unsigned long long multi; while(l > 1; multi = mid * mid; if(multi == x) { return mid; }else if(multi > x) { r = mid -1; }else { l = m...
阅读全文
摘要:思路:自动机, 每次输入一个空格, 就进行一次状态转换逆序遍历的效果应该会更好, 不过我就是简单的正序遍历了下练练自动机代码:#include #include using namespace std;class Solution {public: int len; void countWord(const char *s, int &i, const int &n) { len = 0; while(s[i] != ' ' && i < n) { len++; i++; } } int lengthOfLastWord(const cha
阅读全文
摘要:思路:题目给出的测试数据范围比较小, 使用回溯就可以AC, 搞的我也没有兴趣去研究高效解法了总结:刚开始, 本以为用棋盘问题的状态压缩 DP 就可以解决, 但做完 N-queen 才发现多个皇后并不能在同一条斜线上, 状态压缩的解法似乎就不好用了代码:#include #include #include using namespace std;class Solution {public: int N; vector pos; int result; bool visited[10]; bool attack(const int &row, const int &col) {
阅读全文
摘要:不总结的话, 同一个地方会 WA 到死思路:状态压缩 DP.1. s 表示压缩状态, 若第 i 列放了棋子, 那么该列置 1, 否则该列置 0. 假如 s = 3(0x011) 那么表示棋盘的第 2, 3 列已经放了棋子2. dp[i][s] 表示前 i 行, 状态为 s 的摆放方案数 dp[i][s] = dp[i-1][s] 假如第 i 行不放棋子 dp[i][s] = dp[i-1][oldState] 假如第 i 行放棋子3. 棋盘的最大长宽为 8, 所以 s 的状态最多有 1 getOne(i); if( getOne.count() == c) res += record[i...
阅读全文
摘要:1. chrome 的 console 中不能添加本地文件 2. 下面的代码是在亚马逊的商品页面上添加一个 image, 点击之后触发 alert 函数. 其中 cBoxInner 是人工寻找到的标签 3. using callback JS 中有些函数是 asychronous 的, 比如 这种风
阅读全文
摘要:DescriptionThe cows have reconstructed Farmer John's farm, with its N barns (1 #include using namespace std;const int MAXN = 160;const int INFS = 0x3fffffff;int dp[MAXN][MAXN], U[MAXN], V[MAXN];bool vis[MAXN];void treedp(int u, int vol, int n){ for (int v = 0; v = 0; --v) { int ...
阅读全文
摘要:"I want you to use all your powers -- and all your skills. I don't want his mother to see himthis way..."脸上又长了两个痘。 我本希望天冷之后皮肤问题会好, 不过我失望了。 前几天翻了翻求医不如求己, 我放假在家那会, 妈妈总是让我去看去学。 我在家也翻过, 但是觉得那本书文字的风格不喜欢, 用了太多的比喻句 --- 医学这么严谨的东西, 怎么能用比喻句呢? 财经郎眼有一期节目, 讲到国内图书销量最高的都是健康 category 的, 想想也是心酸, 国内没有私人
阅读全文
摘要:题意:给定一棵树, 树的叶子节点是用户, 每个用户会提供一定的收益, 其他节点都是中间节点. 中间节点之间和中间节点到叶子节点上都有耗费. 求解在总耗费小于总收益的情况下所能得到的最多用户数思路:1. 树形DP, DP[i][j] 表示在以第 i 个节点为根的树上上保留 j 个用户的最大收益. 这样, 求解 dp[i][j] >=0 时最大的 j 即可. 这个 dp 的定义没想到2. DP[i][j] = min(DP[i][j], DP[i][j-k]+DP[v][k]-c), c 表示节点 i 到节点 v 的耗费总结:1. 初始化时, dp[u][0] = 0, dp[u][else
阅读全文
摘要:DescriptionIn the new ACM-ICPC Regional Contest, a special monitoring and submitting system will be set up, and students will be able to compete at their own universities. However there’s one problem. Due to the high cost of the new judging system, the organizing committee can only afford to set the
阅读全文
摘要:DescriptionThere is going to be a voting at FIPA (Fédération Internationale de Programmation Association) to determine the host of the next IPWC (International Programming World Cup). Benjamin Bennett, the delegation of Diamondland to FIPA, is trying to seek other delegation's support
阅读全文
摘要:DescriptionWe have received an order from Pizoor Communications Inc. for a special communication system. The system consists of several devices. For each device, we are free to choose from several manufacturers. Same devices from two manufacturers differ in their maximum bandwidths and prices.By ove
阅读全文
摘要:题目删掉链表倒数第n 个节点思路设置两个指针, cur1, cur2. 让cur2 先走n步, 然后cur1, cur2再同时往下走, 知道cur2达到链表末尾总结考虑边界情况, 当删除的是头结点时, cur2应该会越界, 通过判断cur2的位置返回head->next第一次提交时判断条件都设为了if(cur2) or if(!cur), 忘了c++中NULL和false是不一样的cur1->ne...
阅读全文
摘要:搜索
阅读全文
摘要:题意给定几个字符串, 求解这几个字符串的公共前序思路最朴素的思路是一列一列的比较, 时间复杂度为 n*m, 其中n为字符串的个数, m为公共前序的长度每一列进行比较的时候, 可以使用分治法. 时间复杂度下降到 logn *m总结我最讨厌的便是分支语句. MergeSort 的分支有必要记一下, 当集合小于等于3时不再继续划分. 还要注意边际条件代码 1 #include 2 #include 3 #include 4 using namespace std; 5 class Solution { 6 public: 7 bool allEqual(vector &strs, in...
阅读全文
摘要:题意将罗马字符串转化成对应的数字思路创建一个hash表, 记录每一个或两个罗马符号对应的数字的值对输入的罗马字符串进行匹配. 匹配的时候需要一步lookahead操作, 优先匹配长度为2的罗马符号总结unordered_map 不可使用map.find(string[i])操作, 因为string[i] 是一个 char. 正确的操作应当是 map.find(string.substr(2,1))map 的find操作返回map.end() 或者指向目标pair的指针, 可用 map.find(xx)->first/second 返回pair的值代码 1 #include 2 #incl
阅读全文
摘要:0/1 背包题目有 N 件物品和一个容量为 V 的背包. 第 i 种物品的的费用是 c[i], 价值是 w[i], 每种物品只有一件, 求解将哪些物品装入背包可使价值总和最大思路令 f[i][v] 表示前 i 件物品放到一个容量为 v 的背包可以获得的最大价值f[i][v] = max( f[i-1][v], f[i][v-c[i]]+w[i] )表示第i件物品不放或者放背包两种情况优化f[i][j] 是一个 N行V列的矩阵, 动态规划的过程就是一行一行的往矩阵里填值第i行仅调用第i-1行的值. 第i行的第v列调用第i-1行的第v1,v2列, 并且v1,v2max 优化for t = 0…Tf
阅读全文
摘要:1. LocalStorage a.LocalStorage 是一个大型的 cookies, 总容量 5MB b. 以键值对的方式存储, 继承了 js 的变量声明的随意性, 键值对直接挂在 LocalStorage 下. localStorage.lastname="Smith" c. 用 JS 来存储与访问数据 d. 数据存储在客户端, 一旦创建永久存在 e. 本身不带任何键值对, 是裸的? f. 键值对都是 string 的形式存储. 需要 parseInt 或者 简单的 JSON.parse 来获取真实的 value h. 可通过(!localStorage.key)
阅读全文
摘要:题意1. 给定一棵树, 树上节点有 value, 节点之间 travel 有 cost. 给定起始节点和最大 cost, 求解最大 value思路1. 寻找最短路径 a. 题目描述中有两句话, "There is exactly one route between any two rooms", "Each of the next N-1 lines contains three integers" 说明给出的结构是一棵树 b. 假如给定的时间小于起终节点间的最短路径, 那么逃跑失败. 否则, 会有多余的时间跑到其他节点拿到更多的价值 c. 使用多余的时
阅读全文
摘要:1. Int 在计算机中占 4 Byte, 共 32 位, 最大正数为2147483647, 最小负数为 -21474836482. 正数存储在计算机中的形式为原码,最大正数的十六进制形式为 0X7FFFFFFF. 第一位为7, 二进制位 0111, 最高位为符号位, 所以正数的最高位为03. 负数在计算机的存储形式为补码, 最小负数为0XFFFFFFFF, 第一位是F, 二进制为 1111, 负数的最高位是14. 大学时变反加一背的滚瓜烂熟, -x 可以通过 x 的二进制取反加一最高位置 1 获得5. 溢出. 0X7FFFFFFF + 1 == 0X80000000, 由最大正数变成最小负数
阅读全文
摘要:这几天身体状况非常不好, 加上科研并不顺利, 我老是有天要塌下来的感觉. 这种感觉让我有否定一切的打算.现在的规划是这样, 每天早上7点多一点起床, 吃完早饭做些 POJ, 九度或者 Leetcode 上的题目, 午饭后背一篇新概念课文, 午休后下午 2:15 去实验室搞科研, 晚上 8 点回寝室. 每隔两天去一次健身房, 其他时间去跑步. 这十天的头几天执行情况还好, 后几天因为身边不舒服, 计划全乱了.这个计划是我用了很长的时间总结出来的:午休是必须的, 而中午从实验室回到寝室再回去不再可能了, 我脸上的痘痘不允许. 所以上午只能呆在寝室或者去包图. 而晚上跑步或健身的话不宜在 9 点以后
阅读全文
摘要:Leetcode 有几个题目, 分别是 2sum, 3sum(closest), 4sum 的求和问题和 single Number I II, 这些题目难点在于用最低的时间复杂度找到结果2-sumIO :给定 vector 和 target, 从 vector 中寻找两个元素, 其和等于 target思路1. 哈希法. 先假设给定 vector 和 target 都不小于0. 设置 target 个桶(0...target-1), 把 vector 中的元素 e 放到第 (e%target) 个桶中. x+y = target. y 就在第 target- x%target 个桶中. 这样当
阅读全文
摘要:图解意义一个activity有最基本的三种状态:Resumed activity处于屏幕的最上层,拥有用户的焦点(这状态有时候也被叫做”running”)Paused 另一个activity处于前台,拥有焦点,但是此activity仍然可见。换句话说就是,另一个activity处于这个activity的上方,那个activity部分透明或者没有覆盖整个屏幕。一个paused activity仍然是活动的(这个activity对象被保存在内存当中,它维持所有的状态和成员信息,依附于窗口管理系统),但是在系统处于极低的内存状况时可以被系统销毁。Stopped 此activity完全被另一个ac..
阅读全文