上一页 1 ··· 29 30 31 32 33 34 35 36 37 ··· 43 下一页
摘要: http://wikioi.com/problem/1014/01背包问题是最经典的动态规划之一,这道题目甚至是这其中还简单的一种,因为价值就是本身的重量了。本来比如,w是总重量限制,v[]是每个的价值。但一开始我都有点忘了,查找了一下又勾起了回忆。1.它把总重量从1到w作为状态,对初学者并不是很直观的。但DP本来就是空间换时间的算法,里面经常以整数做状态,数目还既不是太大又不是太小。最终经常是n^2或n^3的复杂度。2.01背包问题是个二维数组的DP,状态转移方程式f[i,v]=max(f[i-1,m],f[i-1,m-w[i]]+v[i])。其中f[i,m]表示前i个元素在m是重量限制时的 阅读全文
posted @ 2013-08-22 23:25 阿牧遥 阅读(1960) 评论(0) 推荐(0)
摘要: http://wikioi.com/problem/1214/这道题也归为贪心了。我也不是很能分辨,但想法确实是:1.有阶段最优化性;2.前一状态和后一状态有关系。想法:1.排个序是很自然的想法,假设按照左端点排序吧;2.然后从左往右取,那么会遇到i+1的左端和当前最右端是否冲突的问题;3.如果不冲突,就把i+1放进来;如果冲突,那么取i+1还是之前的那个呢,就看拿个的右端更小;4.因为反正两个里面取一个,不会改变左边的最多能取的线段树,而右端更小使右边能取的线段树可能更多;5.所以每次比较处理后,比如i处理完了,那么就计算完到i为止能取的最多线段数目,也记录了当前组合最右的断点;6.排序为了 阅读全文
posted @ 2013-08-22 20:12 阿牧遥 阅读(381) 评论(0) 推荐(0)
摘要: 简单的DFS,用数组w记录每一层的宽度就行了,就是遇到一层就++。中间发现在C++里面,如果int未初始化就是用也是有异常的。还有二叉树的数组表示时,从1开始计数会比较好。还有后来学会了数组这样的初始化为0的方法:int l[100] = {0},r[100] = {0};#include using namespace std;int l[20];int r[20];int w[20];int dfs(int level, int node){ w[level]++; if (l[node] == 0 && r[node] == 0) return 1; int dl = 0 阅读全文
posted @ 2013-08-22 00:17 阿牧遥 阅读(423) 评论(0) 推荐(0)
摘要: 这是一道归为贪心题。。。http://wikioi.com/problem/1098/参考:http://www.cnblogs.com/taoziwel/articles/1859984.html思路:1.首先可以想到最终的结果是每一堆牌的数目一样,那么从最大往最小的去补,但这个顺序怎么弄好呢?一时不好想,因为有只能从左右两边补的限制。2.这个时候想到从最左往右顺着来,一个一个解决了。多了就往右推,少了就从右补,但补的时候可能会出现右边的牌不够的情况。比如1,2,27。3.这个时候想,先不管三七二十一,往下走吧。那么补完了可能出现负数,但是因为右边的牌肯定够多(否则avg就不是平均数了),“ 阅读全文
posted @ 2013-08-21 23:27 阿牧遥 阅读(259) 评论(0) 推荐(0)
摘要: 概述PDF是一种不依赖应用程序软件、硬件和操作系统的文件格式。PDF页包含文本、图形和图像。页面外观由内容流(content stream)描述,内容流包含一些列图形对象(graphics objects)。PDF支持不同注释,有文本注释、超链接、标签、文件附件、声音及影视。PDF包含高级信息,这些信息可用来与其他应用程序进行内容交互。PDF的核心是它描述复杂图形和排版的能力。该能力是通过Adobe imaging model实现的。PDF可作为一种页面描述语言,该语言是通过图像模型来描述页面的图形外观。标准的图形对象有:path对象、text对象、image对象。PDF文件可以说成是8位二进 阅读全文
posted @ 2013-08-20 23:16 阿牧遥 阅读(2108) 评论(0) 推荐(0)
摘要: 接着上面一篇文章。那么如果该二叉树是BST呢?可以利用BST的性质。这题也假设这两个节点同时存在。http://www.360doc.com/content/06/1023/15/11192_238001.shtml“从根结点出发,沿着两个给定结点的公共祖先前进。当这两个结点的值同时小于当前结点的值时,沿当前结点的左指针前进;当这两个结点的值同时大于当前结点的 值时,沿当前结点的右指针前进;当第一次遇到当前结点的值介于两个给定的结点值之间的情况时,这个当前结点就是我们要找的最的最低公共祖先了。”int FindLowestCommonAncestor(node *root, int value 阅读全文
posted @ 2013-08-19 23:23 阿牧遥 阅读(332) 评论(0) 推荐(0)
摘要: http://ac.jobdu.com/problem.php?pid=1509此题最直观的方法是两次DFS,分别找到这两个节点的path,然后遍历path1和path2做比较,找到最后一个共同的元素。这个普通的做法在:http://blog.csdn.net/thyftguhfyguj/article/details/9232901但有个更好的办法能够一次DFS中找到,没有O(logN)的额外空间。参见:http://www.cnblogs.com/lyunyu/archive/2013/05/11/3073529.html现在这段代码有一个用例没有过,应该是没有同时找到两个节点(比如只找到 阅读全文
posted @ 2013-08-19 22:54 阿牧遥 阅读(658) 评论(0) 推荐(0)
摘要: 思路比较简单。就是当要pop的时候,如果s2为空,才把s1的转过来。总之就是区分一下此时s2为空和非空的情况。http://ac.jobdu.com/problem.php?pid=1512#include #include #include using namespace std; class Queue {public: void push(int val) { s1.push(val); } int pop() { if (s2.empty()) { while(!s1.empty()) ... 阅读全文
posted @ 2013-08-19 22:03 阿牧遥 阅读(179) 评论(0) 推荐(0)
摘要: 经过之前的某题的经验(http://www.cnblogs.com/lautsie/p/3249723.html),这次稍微顺利了点。不过一开始没理解平衡二叉树的概念,应该是对每个左子树和右子树的高度差距不超过一,而不是所有叶子节点的高度不超过一。算法是递归,高度是要递归算的,然后把结果作为引用去更新。public class Solution { public boolean isBalanced(TreeNode root) { boolean[] balanced = new boolean[1]; balanced[0] = true; ... 阅读全文
posted @ 2013-08-19 20:19 阿牧遥 阅读(194) 评论(0) 推荐(0)
摘要: 九度确实烂啊,用cin就超时,必须要scanf。唯一可说的就是pplast和递归打印。也可以用stack,其实和递归一样的空间复杂度。#includeusing namespace std; struct Node{ int val; Node * next;public: Node(int _val) { val = _val; next = NULL; }}; void reversePrint(Node * head){ if (head == NULL) return; else { reve... 阅读全文
posted @ 2013-08-19 14:52 阿牧遥 阅读(207) 评论(0) 推荐(0)
上一页 1 ··· 29 30 31 32 33 34 35 36 37 ··· 43 下一页