二维动态规划
摘要:给定N个点,任意两个点之间都联通,找出两条路径(涵盖所有点),使他们的和最小首先把点从左往右编号0-n-1那么原题相当于找两条从左往右的不想交的路线 dp[i]表示两条路走到了i和i-1最少的花费是多少 答案是dp[n-1]+cost[n-2][n-1] dp[1]=cost[0][1] dp[i]=min(dp[i-1]+cost[i-2][i], dp[i-2]+cost[i-2][i-1]+cost[i-3][i], dp[i-2]+cost[i-3][i-1]+cost[i-2][i])
阅读全文
posted @
2012-10-14 21:55
知识天地
阅读(338)
推荐(0) 编辑
中位数优先容器
摘要:要求编写一个容器,它可支持两种操作:push()和pop(),push(K)操作可将元素K放入容器,pop()操作可将容器中的中位值弹出。例如:push(1),push(2),push(3)后pop()[输出为2]。解决方法,创建一个最大值优先的优先队列,将其记为左队列ql,创建一个最小值优先的优先队列,将其记为右队列qr,我们规定ql不为空时,ql.top()为中位值,记为mid,对于push(k),如果k>mid,则将k压入右边优先队列qr,如果k<=mid怎将其压入左边优先队列ql,然后将左右两个队列做平衡处理。pop()则只需将ql.top()的值弹出后做平衡处理即可。这种
阅读全文
posted @
2012-10-09 12:32
知识天地
阅读(390)
推荐(0) 编辑
八皇后问题N种解法(转)
摘要:原文地址:http://www.cnblogs.com/codingmylife/archive/2012/10/04/2711839.html 主要包括全排列和回溯两类,其中全排列可以递归与非递归,回溯也可以递归与非递归。于是加一起有4种解法。#include <iostream>#include <algorithm>using namespace std;template <size_t N> struct ArraySizeHelper {char _[N];};template <typename T, size_t N> ArrayS
阅读全文
posted @
2012-10-08 11:06
知识天地
阅读(524)
推荐(0) 编辑
单调栈 Histogram
摘要:这个题目是一个好朋友给我讲的方法,我按照自己的理解,敲出来代码。 所以把算法流程和代码贡献出来,希望和大家共同学习。题目大意:给出一个柱形统计图(histogram), 它的每个项目的宽度是1, 高度和具体问题有关。 现在编程求出在这个柱形图中的最大面积的长方形。例如:7 2 1 4 5 1 3 37表示柱形图有7个数据,分别是 2 1 4 5 1 3 3, 对应的柱形图如下,最后求出来的面积最大的图如右图所示。分析:如果采用枚举的方式,如果当前我们枚举项是 i = 0, 即 height = 2,我们用另外两个变量 j 和k 向左和向右两个方向搜素,找到第一个 小于 height的下标,这样
阅读全文
posted @
2012-09-06 22:32
知识天地
阅读(381)
推荐(0) 编辑
STL-priority_queue用法(重点: 升序,小根堆)
摘要:昨晚除夕夜,没有看春晚,而是一个人在实验室参加了科大ACM的比赛。 一句话总结:完全找虐。哎……刚开始还有点自信的我,被打击了。 让自己明白,我根本不聪明啊。恩,但对于未来,还是要相信自己!用积极乐观的心态 + 勤奋刻苦,去拼搏。 要想达到一定的高度,必须一直勤奋、刻苦,积累。 打击归打击,收获还是有的。第一是,意识到不断的勤奋很重要;第二是,见证了,程序不经常写,很常用的技巧都会陌生……昨天写快排+三次二分都花了很久;而后一道模拟题,BFS+priority_queue,忘记了优先队列的用法……加油。下面,总结一下priority_queue的用法,免得以后又忘记了,还要到处找(C++...
阅读全文
posted @
2012-09-05 14:21
知识天地
阅读(8800)
推荐(0) 编辑
十进制数1~n中1出现的次数
摘要://copyright@ saturnman //updated@ 2011 July #include "stdafx.h" #include "string.h"#include "stdlib.h"int NumberOf1(const char* strN);int PowerBase10(unsigned int n);/////////////////////////////////////////////////////////////////////////////// Find the number of 1 in
阅读全文
posted @
2012-09-04 14:54
知识天地
阅读(472)
推荐(0) 编辑
九格游戏最少移动步数算法实现
摘要:给九个格子1,2,...9 一共9个数组,每次只能交换9与他直接相邻的数字,计算从一种状态到另外一种状态的最少移动步数。用广搜+康拓展开的方法实现。#include "stdafx.h" #include<iostream> #include<string> #include <vector> #include <math.h>#include <map>#include <queue>using namespace std;const int MAX=400000;long int fac[]={1,
阅读全文
posted @
2012-08-29 11:20
知识天地
阅读(1009)
推荐(0) 编辑
康拓展开及应用
摘要:题目:给出n个互不相同的字符, 并给定它们的相对大小顺序,这样n个字符的所有排列也会有一个顺序.现在任给一个排列,求出在它后面的第i个排列.这是一个典型的康拓展开应用,首先我们先阐述一下什么是康拓展开。(1)康拓展开 所谓康拓展开是指把一个整数X展开成如下形式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[2]*1!+a[1]*0!。(其中,a为整数,并且0<=a[i]<i(1<=i<=n))(2)应用实例 {1,2,3,4,...,n}表示1,2,3,...,n的排列如 {1,2,3} 按从小到大排列一共6个:1
阅读全文
posted @
2012-08-28 18:06
知识天地
阅读(288)
推荐(0) 编辑
【转】人民搜索面经
摘要:发信人: YouTube (YouTube - Broadcast Yourself), 信区: Job标题: 人民搜索面试回忆发信站: 北邮人论坛 (Sat Oct 22 23:18:31 2011), 站内所投职位:搜索研发工程师结果:拒信1封一、面试形式 1、3轮1V1的技术面试;某轮面试通过,稍事休息后开始下一轮面试。 2、面试过程基本分为两部分: 1)对简历上所写项目的描述,及回答对方感兴趣的项目细节; 2)对方给出数组、链表等常见程序设计问题,要求描述解决问题的思路;并把思路转化为代码(手写)。 这一部分是最重要的环节,占面试总时间的85%以上。二、面试题回忆 1、删除字符串开始及
阅读全文
posted @
2012-08-27 22:55
知识天地
阅读(565)
推荐(0) 编辑
在两个有序的数组中找第N个数,二分查找 O(lgm+lgn)级
摘要:在两个有序的数组中找第N个数,O(lgm+lgn)级分类:算法2009-10-09 20:52981人阅读评论(3)收藏举报问题描述:Give a divide and conquer algorithm for the following problem:you are given two sorted lists of size m and n, and are allowedunit time access to the ith element of each list. Give an O(lg m + lgn)time algorithm for computing the kth
阅读全文
posted @
2012-08-27 08:28
知识天地
阅读(2700)
推荐(0) 编辑
编程之美——小飞的电梯调度算法之新解(中位数)
摘要:亚洲微软研究院所在的希格玛大厦一共有6部电梯。在高峰时间,每层都有人上下,电梯每层都停。实习生小飞常常会被每层都停的电梯弄的很不耐烦,于是他提出了这样一个办法:由于楼层并不算太高,那么在繁忙的上下班时间,每次电梯从一层往上走时,我们只允许电梯停在其中的某一层。所有乘客从一楼上电梯,到达某层后,电梯停下来,所有乘客再从这里爬楼梯到自己的目的层。在一楼的时候,每个乘客选择自己的目的层,电梯则计算出应停的楼层。问:电梯停在哪一层楼,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少?解法一:暴力枚举法。从第1层枚举到第N层,求出电梯在x层停的话,所有乘客需要怕多少层楼。求出最少的那层即可。代码略。解
阅读全文
posted @
2012-08-26 14:12
知识天地
阅读(1114)
推荐(0) 编辑
有n 个长为m+1 的字符串,求前后m个字符匹配所能形成的最长字符串链:利用弗洛伊德算法求最长路径
摘要:有n 个长为m+1 的字符串,如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接,问这n 个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。把字符串看成图中的一个顶点,两字符串匹配则两个顶点间有边,从而转化为图的问题。利用弗洛伊德算法求图的最长路径。[cpp]view plaincopy#include<iostream>#include<string>usingnamespacestd;#defineINFINITY-10000#defineMAX_VERTEX_NUM20typedefstructMGraph{strin
阅读全文
posted @
2012-08-23 11:15
知识天地
阅读(789)
推荐(0) 编辑
网易有道笔试:求连通图的割点(关节点)
摘要:题目:求一个连通图的割点,割点的定义是,如果除去此节点和与其相关的边,图不再连通,描述算法。分析:1. 最简单也是最直接的算法是,删除一个点然后判断连通性,如果删除此点,图不再连通,则此点是割点,反之不是割点(图的连通性一般通过深搜来判定,是否能一次搜索完 全部顶点);2. 通过深搜优先生成树来判定。从任一点出发深度优先遍历得到优先生成树,对于树中任一顶点V而言,其孩子节点为邻接点。由深度优先生成树可得出两类割点的特性: (1)若生成树的根有两棵或两棵以上的子树,则此根顶点必为割点。因为图中不存在连接不同子树顶点的边,若删除此节点,则树便成为森林; (2)若生成树中某个非叶子顶点V,其某棵子树
阅读全文
posted @
2012-08-23 11:12
知识天地
阅读(6355)
推荐(0) 编辑
大量url,如何去重
摘要:问题:有大量的字符串格式的URL,如何从中去除重复的,优化时间空间复杂度1. 内存够用,将URL存入hash链表,每个URL读入到hash链表中,遇到重复的就舍弃,否则加入到链表里面,最后遍历得到所有不重复的URL。空间复杂度M,时间复杂度为O(N+N/M),M为不重复的URL,N为总URL数,但是M无法预测,所以存在风险,可能内存不足以存储所有的不重复URL。2. 为了解决内存可能不足的问题,需要把hash链表变化成普通的hash表,每个hash表元素指向一个文件文件,这个文件记录了所有该hash值对应的无重复的URL,那么在加入URL的时候就遍历对应文件中的URL,没有重复则加入到文件中。
阅读全文
posted @
2012-08-23 11:00
知识天地
阅读(5491)
推荐(0) 编辑
转 STL hash_map & map
摘要:几句话道出map和hash_map的区别1. STL map is an associative array where keys are stored in sorted order using balanced trees. While hash_map is a hashed associated container, where keys are not stored in an ordered way. Key, value pair is stored using a hashed function.2. Insertion and lookup takes Ologn time
阅读全文
posted @
2012-08-22 16:52
知识天地
阅读(248)
推荐(0) 编辑
后缀树求最长子字符串
摘要:问题描述:给定一个文本文件作为输入,查找其中的最长子字符串。例如, ”Ask not what your country can do for you, but what you can do for your country"中的“ can do for you"就是最长子字符串。解题过程:这个问题最直接的解法就是变位词程序(《编程珠玑》2.4节)。如果将输入字符串存储在c[0..n-1]中,那么我们可能会使用类似下面的伪代码比较每个子串;maxlen = -1;for i = [0, n] for j = (i, n) if (thislen = comlen(&
阅读全文
posted @
2012-08-21 10:53
知识天地
阅读(671)
推荐(0) 编辑
回文字符串(动态规划解法)
摘要:回文字符串时间限制:3000ms | 内存限制:65535KB难度:4描述所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。输入第一行给出整数N(0<N<100)接下来的N行,每行一个字符串,每个字符串长度不超过1000.输出每行输出所需添加的最少字符数样例输入1Ab3bd样例输出2一道动态规划题,辅助空间cost[i][j]表示要将从s[j]个字符开始长度为i的子
阅读全文
posted @
2012-08-21 07:33
知识天地
阅读(1275)
推荐(0) 编辑
构造数独 算法及代码实现
摘要:子标题: 编程之美1.15——构造数独转载信息:http://blog.csdn.net/linyunzju/article/details/7673959问题:构造一个9*9的方格矩阵,玩家要在每个方格中,分别填上1至9的任意一个数字,让整个棋盘每一列、每一行以及每一个3*3的小矩阵中的数字都不重复。首先我们通过一个深度优先搜索来生成一个可行解,然后随机删除一定数量的数字,以生成一个数独。#include<iostream> #include<cstdlib> usingnamespace std; #define LEN 9 #define CLEAR(a) mem
阅读全文
posted @
2012-08-11 16:17
知识天地
阅读(698)
推荐(0) 编辑
线段树模板
摘要://logn时间查找任意一段数的新信息#include<stdio.h>#include<stdlib.h>typedef struct node{int l,r;int good;struct node *Ln,*Rn;}*Linklist,Lnode;int nice;int max(int a,int b){ if(a>b)return a; else return b;}void creat(Linklist list){Linklist p,q;int h=(list->l+list->r)/2;if(list->r-list->
阅读全文
posted @
2012-02-21 10:58
知识天地
阅读(527)
推荐(0) 编辑
后缀数组
摘要:数组排序:qsort 时间O(n)标记以每个字符开始的排序顺序标记排序为i的后缀字符串的位置查找:二分查找
阅读全文
posted @
2012-02-13 14:44
知识天地
阅读(204)
推荐(0) 编辑