10 2011 档案

双向BFS
摘要:转 http://www.cppblog.com/Yuan/archive/2011/02/23/140553.html如果目标也已知的话,用双向BFS能很大提高速度单向时,是 b^len的扩展。双向的话,2*b^(len/2) 快了很多,特别是分支因子b较大时至于实现上,网上有些做法是用两个队列,交替节点搜索×,如下面的伪代码: while(!empty()){ 扩展正向一个节点 遇到反向已经扩展的return 扩展反向一个节点 遇到正向已经扩展的return }但这种做法是有问题的,如下面的图:求S-T的最短路,交替节点搜索(一次正向节点,一次反向节点)时Step 1 : S . 阅读全文

posted @ 2011-10-31 22:12 ushiojamie 阅读(220) 评论(0) 推荐(0)

欧拉图与汉密尔顿图(转)
摘要:转自: http://class.htu.cn/lisanshuxue/neirong/7_4.htm 1936年瑞士数学家列昂哈德·欧拉(Leonhard Euler)发表了图论的第一篇论文“哥尼斯堡七桥问题”。这个问题是这样的:哥尼斯堡城市有一条横贯全城的普雷格尔(Pregel)河,城的各部分用七座桥联接,每逢假日,城中居、民进行环城逛游,这样就产生了一个问题,能不能设计一次“遍游”,使得从某地出发对每座跨河桥只走一次,而在遍历了七桥之后却又能回到原地。在图7-4.1中画出了哥尼斯堡城图,城的四个陆地部分分别标以A、B、C、D。将陆地设想为图的结点,而把桥画成相应的连接边,这样城 阅读全文

posted @ 2011-10-31 21:48 ushiojamie 阅读(892) 评论(1) 推荐(0)

序列长度【差分约束】
摘要:【问题描述】 有一个整数序列,我们不知道她的长度是多少(即序列中整数的个数),但我们知道在某些区间中至少有多少个整数,用区间 [ai,bi,ci]来描述它,[ai,bi,ci]表示在该序列中处于[ai,bi]这个区间的整数至少有ci个。现在给出若干个这样的区间,请你求出满足条件的最短序列长度是多少。如果不存在则输出 -1。【文件输入】 第一行包括一个整数n(n<=1000),表示区间个数; 以下n行每行描述这些区间,第i+1行三个整数ai,bi,ci,由空格隔开,其中0<=ai<=bi<=1000 而且 1<=ci<=bi-ai+1。【文件输出】 文件输出只 阅读全文

posted @ 2011-10-31 19:26 ushiojamie 阅读(270) 评论(0) 推荐(0)

尼克的任务
摘要:尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成。尼克的一个工作日为N分钟,从第一分钟开始到第N分钟结束。当尼克到达单位后他就开始干活。如果在同一时刻有多个任务需要完成,尼克可以任选其中的一个来做,而其余的则由他的同事完成,反之如果只有一个任务,则该任务必需由尼克去写成,假如某些任务开始时刻尼克正在工作,则这些任务也由尼克的同事完成。如果某任务于第P分钟开始,持续时间为T分钟,则该任务将在第P+T-1分钟结束。写一个程序计算尼克应该如何选取任务,才能获得最大的空暇时间。输入输入数据第一行包含两个用 阅读全文

posted @ 2011-10-29 17:01 ushiojamie 阅读(262) 评论(0) 推荐(0)

书的复制【答案的记录】
摘要:现在要把M本有顺序的书分给K个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一、第三、第四本数给同一个人抄写。现在请你设计一种方案,使得复制时间最短。复制时间为抄写页数最多的人用去的时间。输入第一行两个整数M、K;(K<=M<=100)第二行M个整数,第i个整数表示第i本书的页数。输出共K行,每行两个正整数,第i行表示第i个人抄写的书的起始编号和终止编号。K行的起始编号应该从小到大排列,如果有多解,则尽可能让前面的人少抄写。样例BOOK.IN9 31 2 3 4 5 6 7 8 9BOOK.OUT1 56 阅读全文

posted @ 2011-10-29 15:56 ushiojamie 阅读(310) 评论(0) 推荐(0)

石子合并(copy的 我不会)
摘要:石子归并[1]——浅谈贪心思想在动态规划中的应用题目大意:在一个操场上摆放着一排n(n≤1000)堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的花费。试编程求出将n堆石子合并成一堆的最小花费。算法分析:这是一道经典的动态规划问题,用m[i,j]表示第i堆石子合并到第j堆石子所需的最小花费,w[i,j]表示第i堆石子到第j堆石子的石子总数。状态转移方程如下:上述算法的状态总数为O(n2),每个状态转移的状态数为O(n),每次状态转移的时间为O(1),所以总的时间复杂度为O(n3)。显然,这个简单易懂的算法的过于低效了,我们需要进 阅读全文

posted @ 2011-10-25 22:20 ushiojamie 阅读(426) 评论(0) 推荐(0)

最长不下降子序列2(这个方法!)
摘要:设有整数序列b1,b2,b3,…,bm,若存在i1<i2<i3<…<in,且bi1<bi2<bi3<…<bin,则称 b1,b2,b3,…,bm中有长度为n的不下降序列bi1,bi2,bi3,…,bin。求序列b1,b2,b3,…,bm中所有长度(n)最大不下降子序列具有相同元素的序列,我们称之为重复序列,这里我们不统计重复序列,也即是说,重复的是算一次输入格式 Input Format 第一行为m,表示m个数(m<=900)第二行m个数输出格式 Output Format 第一行输出最大长度n第二行输出长度为n的序列个数Total 在我( 阅读全文

posted @ 2011-10-23 22:18 ushiojamie 阅读(432) 评论(0) 推荐(0)

特种部队【动态规划】
摘要:双进程dp需要练习【问题描述】某特种部队接到一个任务,需要潜入一个仓库。该部队士兵分为两路,第一路士兵已经在正面牵制住了敌人,第二路士兵正在悄悄地从后方秘密潜入敌人的仓库。当他们到达仓库时候,发现这个仓库的锁是一把很诡异的电子锁,上面是一排按钮,每个按钮上都有一个数字……10秒钟后,总部返回了该锁的技术信息。要解开这把锁,首先要从左边的第一个按钮开始向右按动,中间可以跳过某些按钮,按动到最右边的按钮后,反向向左按动。最终,每个按钮都要按且仅按一次。每两个相邻按钮上数字之差的总和的最小值,便是解开这把锁的密码。作为一支装备精良的特种部队,必须要在最短的时间内完成任务,解开这把锁,潜入仓库。【输入 阅读全文

posted @ 2011-10-21 22:23 ushiojamie 阅读(336) 评论(0) 推荐(0)

过河【路径压缩】
摘要:·其一 我们先假设最极端的可能,也就是100个石子,每相邻的两个石子距离都超过100,且第一个石子与起点的距离超过100,最后一个石子与终点的距离也超过100。其实这里包含一个数学原理,即所要压缩到的最小距离为n*(n-1),n代表最大跳跃距离,1代表最小跳跃距离,在这道题中,最小压缩距离为90,也就是相邻两个石子距离超过90时,可以把它们的距离改为90。这里我们为了方便人工计算与调试,把最小距离定为100。 (复制的)·其二 为什么s=t要分开讨论 当s<>t时 只要走的地方大于s和t的最小公倍数不管怎么样都可以走到 而当s=t的时候就不一定了 所以要单独讨论 阅读全文

posted @ 2011-10-21 22:03 ushiojamie 阅读(146) 评论(0) 推荐(0)

[动态规划]p1051选课
摘要:牢记树型dp的代码!重点中间三句【问题描述】学校实行学分制。每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分。学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的。学生选修了这M门课并考核通过就能获得相应的学分。 在选修课程中,有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其它的一些课程的基础上才能选修。例如《Frontpage》必须在选修了《Windows操作基础》之后才能选修。我们称《Windows操作基础》是《Frontpage》的先修课。每门课的直接先修课最多只有一门。两门课也可能存在相同的先修课。每门课都有一个课号,依次为1,2,3 阅读全文

posted @ 2011-10-18 22:14 ushiojamie 阅读(270) 评论(0) 推荐(0)

之后要看的题
摘要:20111014SOFTWARE一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术人员分工完成,每个技术人员完成同一软件的不同模块的所用的天数是相同的,并且是已知的,但完成不同软件的一个模块的时间是不同的,每个技术人员在同一时刻只能做一个模块,一个模块只能由一个人独立完成而不能由多人协同完成。一个技术人员在整个开发期内完成一个模块以后可以接着做任一软件的任一模块。写一个程序,求出公司最早能在什么时候交付软件。这道题目是典型的二分答案加验证的算法,即给出一个答案,再验证这个答案是否可行。若可行,则在其左区间内继续二分, 阅读全文

posted @ 2011-10-14 20:31 ushiojamie 阅读(165) 评论(0) 推荐(0)

十个利用矩阵乘法解决的经典题目
摘要:出自matrix67.com好像目前还没有这方面题目的总结。这几天连续看到四个问这类题目的人,今天在这里简单写一下。这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质。不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符。在数学中,一个矩阵说穿了就是一个二维数组。一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是一个n行p列的矩阵,其中的第i行第j列位置上的数等于前一个矩阵第i行上的m个数与后一个矩阵第j列上的m个数对应相乘后所有m个乘积的和。比如,下面的算式表示一个2行2列的矩阵乘以2行3列的矩阵,其结果是一个2行3列的矩阵。其中,结果的那个4等于2*2+0*1: 下面的算式 阅读全文

posted @ 2011-10-12 21:10 ushiojamie 阅读(144) 评论(0) 推荐(0)

poj要做题
摘要:【图论】【poj 3020】Antenna Placementhttp://www.cnblogs.com/liukeke/archive/2011/04/19/2020732.html【搜索】【poj 1426】Find The Multiple【动态规划】【poj 3267】The Cow Lexicon (正在思考中……)【动态规划】【poj 1836】Alignmenthttp://hi.baidu.com/z55872452006/blog3254 并不是很重要 阅读全文

posted @ 2011-10-12 20:52 ushiojamie 阅读(112) 评论(0) 推荐(0)