- 博客(324)
- 资源 (36)
- 收藏
- 关注
转载 动态规划解最长公共子序列问题
动态规划法经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是动态规划法所采用的基本方法。【问题】 求两字符序列的最长公共字符子序列问题描述
2013-08-04 01:32:52
841
原创 poj1286-polya计数、burnside定理
组合数学题目就是一个手镯,用三种颜色图,可以旋转和翻转,求有多少方案。 建议先看看群、burnside定理,polya计数等知识给出公式; 代码:#include #include #include //最大公约数long long gcd(long long a, long long b){ long long c; if (a =
2012-12-19 22:33:52
2137
转载 C#注册表
C#操作注册表Windows 操作系统的注册表包含了很多有关计算机运行的配置方式,打开注册表我们可以看到注册表是按类似于目录的树结构组织的,其中第二级目录包含了五个预定义主键分别是:HKEY_CLASSES_ROOT,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USERS,HKEY_CURRENT_CONFIG。 下面我们来分别解释这5个类
2012-12-04 12:20:51
805
原创 poj2014-模拟----水题1A
题目比较简单,不多说,就是按照题目说的将矩形放到框里(框的最大宽度给出),放不下,就放下一行。注意这里不能旋转,这也就成为水题模拟题的原因,也不让求最大最小,就是模拟最终的状态。不能旋转,直接放。 代码:#include #include #include #define Min(a,b) (a<b?a:b)#define Max(a,b) (a>b?a:b)i
2012-11-26 23:06:33
1155
原创 poj3522-kruscal算法求最小生成树+枚举
题意;给你一个无向,求所有生成树中,最大边与最小边差值最小的那个值。算法分析:排序,从最小边开始,枚举每一条最小边,然后求最小生成树,求差值,然后求出最小值。代码;#include #include #include #define nMax 105#define inf 0x7fffffffstruct EDGE{ int u,v,w;}e
2012-11-20 22:47:52
1093
原创 poj1661-这题目简单dp但是要考虑情况比较多,wa了n次死在了自己定义的无穷大上面
题目大意:这个是中文的,就不用解释了,有个游戏叫是男人就下100层,就是这个游戏哈。。。算法分析:仔细分析发现,其实就是从第一个点开始,由于题目说肯定有解,不会摔死,所以要么向左走,要么向右走,其中至少一个有解。到下一层,同样要么左走要么右走,其实就是两种状态。那么我们每次只需要求这两种状态的最小值既可。状态方程:对于每一层的两个点,edge[i].min1 = Min
2012-11-18 00:00:54
1377
原创 poj1036-题目好难理解,理解了就变得简单了许多dp
一开始,不理解题目意思,都不知道样例是如何计算出来的。看到discuss中有人说了题目的意思是:有个伸缩门,门的宽度0~K,每个时间可以伸长或缩短1个单位,有N个流氓,他们在T时刻到达,如果这时门的宽度正好与他们的stoutness相等时,便可获得一定的收入,问最大的收入是多少。 看不到题目说什么伸缩门,不知道这是什么翻译,但是总算理解题目意思了,其实就是个背包。就是在第i个流氓能进的
2012-11-17 19:10:11
2126
原创 poj2481-树状数组
这里就是求区间覆盖问题,如果你的区间完全覆盖它的,那么你就比他强壮。求出比自己强壮的牛数。 树状数组:树状数组是一个查询和修改复杂度都为log(n)的数据结构,假设数组a[1..n], 用lowbit函数维护了一个树的结构那么查询a[1]+...+a[n]的时间是log级别的,而且是一个在线的数据结构, 支持随时修改某个元素的值,复杂度也为log
2012-11-15 01:12:55
3970
转载 后缀数组——处理字符串的有力工具,好好学习
后缀数组——处理字符串的有力工具作者:罗穗骞2009年1月 【摘要】 后缀数组是处理字符串的有力工具。后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现,能够实现后缀树的很多功能而时间复杂度也并不逊色,而且它比后缀树所占用的内存空间小很多。可以说,在信息学竞赛中后缀数组比后缀树要更为实用。本文分两部分。第一部分介绍两种构造后缀数组的方法,重点介绍如何用简洁高效的代码
2012-11-13 23:54:29
3619
1
转载 后缀树学习笔记
在pongba的讨论组上看到一道Amazon的面试题:找出给定字符串里的最长回文。例子:输入XMADAMYX。则输出MADAM。这道题的流行解法是用后缀树(Suffix Tree)。这坨数据结构最酷的地方是用它能高效解决一大票复杂的字符串编程问题:在文本T里查询T是否包含子串P(复杂度同流行的KMP相当)。 文本T里找出最长重复子串。比如abcdabcefda里abc同da都重复出现,而最
2012-11-13 00:49:32
1181
原创 poj2728-最小比率生成树/0-1分数规划/二分/迭代
题目意思:有n个村庄,村庄在不同坐标和海拔,现在要对所有村庄供水,只要两个村庄之间有一条路即可,建造水管距离为坐标之间的欧几里德距离,费用为海拔之差,现在要求方案使得费用与距离的比值最小,很显然,这个题目是要求一棵最优比率生成树。 0-1规划: 概念有带权图G, 对于图中每条边e[i], 都有benifit[i](收入)和cost[i](花费), 我们要求的是一棵生成树T,
2012-11-13 00:34:19
5032
原创 poj3256-dfs
题目意思比较简单,有K头牛,有N个牧地,这N个牧地有M条单项路,求如果这K头牛要聚餐,可以去的地方有多少个,也就是每头牛都能到的地方有多少个? 分析:开始K头牛在某个牧草地,然后求着K头牛能都到的地方多少个。那我们可以dfs求出每头牛能到的地方,然后枚举N个牧草地,如果有N头牛能到的就是了。。。。 代码:#include #include #include
2012-11-11 23:32:23
1421
原创 poj2516-经典最小费用最大流-有点难度
题目意思,这个理解起来就很费劲 有N个供给商,M个雇主,K种物品。每个供给商对每种物品的的供给量已知,每个雇主对每种物品的需求量的已知,从不同的供给商输送不同的货物到不同的雇主手上需要不同的花费,又已知从供给商Mj送第kind种货物的单位数量到雇主Ni手上所需的单位花费。问:供给是否满足需求?若是满足,最小运费是多少?样例解释算法分析1、供给是否满足需求
2012-11-09 08:44:40
1457
原创 poj1606-没想好就不要下手,否则浪费时间-模拟题的教训
这道题目题意很简单,就是给你两个容器,求出获得指定量水的步骤。一看稍微分析就知道是广度优先搜索。就是每次最多有六种情况,填满a,填满b,清空a,清空b,从a倒到b,从b倒到a。对每种情况将在这种情况下的可能的情况进入队列,直到找到最终结果。 注意不要以为和题目答案不一样就以为自己是错的,因为倒的方法可能不一样,所以最好自己验证一下,题目也标出了special judge,就是答案不止一
2012-11-05 00:52:41
1197
原创 poj3295-纠结的模拟题
题目很简单就是计算表达式。这个可以入栈出栈,来计算。discuss里面通过递归计算很经典。另外就是用& | 还是用&& ||这是个问题。否则wa死都不知道。总体解决如果用c++编译器编译,赋值为0或者为1,然后用 ! && ||千万不要用用& |实际上如果我们赋值用 = i &(1 位运算和逻辑运算还是有差别的。bool还是int#include #include
2012-11-04 17:15:36
1217
原创 poj3352-参考3177,同样代码,直接通过
#include #include #include #define nMax 5005#define Min(a,b) (a<b?a:b)struct EDGE{ int v,next;}edge[2 * nMax];int preEdge[nMax];int N, edgeNum, index;bool map[nMax][nMax];int
2012-11-04 13:15:48
933
原创 poj3177-tarjan求桥/割边
题目大意:有F个牧场,1给定现有的R条直接连接两个牧场的路,F-1若low[v]>dfn[u],则(u,v)为割边。但是实际处理时我们并不这样判断,因为有的图上可能有重边,这样不好处理。我们记录每条边的标号(一条无向边拆成的两条有向边标号相同),记录每个点的父亲到它的边的标号,如果边(u,v)是v的父亲边,就不能用dfn[u]更新low[v]。这样如果遍历完v的所有子节点后,发现l
2012-11-04 13:14:35
6919
原创 poj2370-看题目的时间比写代码AC的时间都长,水题为啥都那么难理解呢,可能英文太差了?
不解释,耐心看完题目意思吧。好好练习一下英文。#include #include #include #define nMax 110int K;int num[nMax];int cmp(const void *a, const void *b){ return *(int *)a - *(int *)b;}int main(){ w
2012-11-02 23:43:47
1795
原创 poj1384-完全背包
具体可以到到网上搜索一下背包九讲,各种类型的背包,不过基础还是01背包。#include #include #include #define Min(a,b) (a<b?a:b)#define Max(a,b) (a>b?a:b)#define inf 0x0FFFFFFF#define nMax 510int E,F,N;int price[nMax],
2012-11-01 23:46:16
1197
原创 poj3628-DFS/0-1背包-DP/枚举-数据比较弱、方法比较多
因为数据范围20,所以直接枚举是2^20,不会超时。直接求组合就行。在N个数里面取1个数,2个数。。。。N个数,求出一个最小差值就可以了。下面是组合的算法--175MS#include#include #include #include #define nMax 25int N,B;int height[nMax];int ans;int get
2012-10-31 23:58:20
1592
原创 poj1456-贪心
题目大意:有N件商品,分别给出商品的价值和销售的最后期限,只要在最后日期之前销售处,就能得到相应的利润,并且销售该商品需要1天时间。问销售的最大利润。解题思路:1.我用的贪心的思想,将商品的价值从大到小排序,找到销售的最大期限,用hasht数组标记,如果它的期限没有被占用,就在该天销售,如果占用,则从它的前一天开始向前查找有没有空闲的日期,如果有则占用。这样就可以得到最大销售量。
2012-10-30 22:28:02
1344
原创 poj2287-田忌赛马贪心
/*贪心策略:1,如果田忌的最快马快于齐王的最快马,则两者比。(因为若是田忌的别的马很可能就赢不了了,所以两者比)2,如果田忌的最快马慢于齐王的最快马,则用田忌的最慢马和齐王的最快马比。(由于所有的马都赢不了齐王的最快马,所以用损失最小的,拿最慢的和他比)3,若相等,则比较田忌的最慢马和齐王的最慢马3.1,若田忌最慢马快于齐王最慢马,两者比。(田忌的最慢马既然能赢一
2012-10-29 22:46:36
3576
原创 poj3281-最大流
题目开始以为可以用二分匹配解决,但是要和两边都求最大匹配,没办法解决。但是想到最大流可以解决二分匹配问题,那么就建图用网络流解决。但是一开始是这样建图源点-food-牛-drink-汇点,这样虽然满足每份food和drink只能给一头牛吃,但是没法解决每头牛只能吃一份的问题。难在建图,如果是这样,源点-food-牛-牛-drink-汇点,将牛拆成两个点,里面的边权值全为1.用效率不是很高的
2012-10-29 01:05:02
3322
原创 poj3020-二分图匹配
对于任意图:|最小边覆盖|+|最大匹配|=|V|二分图的最大匹配=最小点覆盖数对于二分图:以下数值等价.最大匹配最小点覆盖|V|-最大独立集(二分图or有向无环图)|V|-最小边覆盖数|V|-最小路径覆盖数(有向无环图)|V|-最小路径覆盖数/2(无向图)(上面括号里有有向无环图的,均是将一个点拆成两个点连边匹配)由于任意图的那几个几乎用不到于是这里
2012-10-27 02:13:03
1512
原创 poj1740-楼教主所谓的男人八题之一
*题目大意:* 对于n堆石子,每堆若干个,两人轮流操作,每次操作分两步,* 第一步从某堆中去掉至少一个,第二步(可省略)把该堆剩余* 石子的一部分分给其它的某些堆。最后谁无子可取即输。*解题思路:* 1、先考虑1堆的时候,1堆当然是N点(必胜点),* 2、然后考虑2堆,细想一下可以发现,当2堆一样时,这个时候* 的目的就是要把对方给逼到只有2堆都是1的时候,就能必胜了。
2012-10-25 23:40:27
5400
原创 poj1655-又是一道简单而又纠结的题目
题目很好理解,就是去掉树上的一个节点,看看剩下的子树中最大的是多少,然后在这些最大值中求一个最小值,如果有多个点都是最小值,那么找一个序号最小的节点。输出节点号,和最小值。 经过简单分析,dfs深度优先搜索可以解决,只需要求出每个节点下子树的总结点个数即可。举例说明:设有一棵树20个节点,其中有一个节点为u,u有两个孩子节点,设u以下有10个节点,两个孩子分别有6和4个节点,那
2012-10-25 21:15:18
3649
原创 poj3090-隐藏的好深,其实就是一个欧拉函数
看到这个题目简单分析了一下,最后才发现原来就是一个数论知识。首先,题目主要是求从0,0能看到的点的个数。先考虑只有1×1的时候,三个点,根据图明显看出,只需要计算下三角,结果=下三角的个数×2再加1(斜率为1的点)。那么我们只需要计算斜率从0到1之间的个数就行了,不包括1,包括0.结果设为sum,那么最终就是2*sum+1. 1×1只有一个斜率为0的2×2斜率有0,1/2(
2012-10-24 21:18:30
4363
2
原创 poj2028-水的一塌糊涂
直接上代码:还以为很麻烦呢。。。 #include #include #include #define nMax 110int hash[nMax];int N,Q;int main(){ int m; int date; while (1) { scanf("%d %d", &N, &Q); if (N == 0 && Q ==
2012-10-24 00:43:11
2023
原创 poj1144-tarjan求割点
何为割点?也就是题目中的关键点。在一个无向图中,去掉一个点,这个无向图会变成多个子图,那么这个点就叫做割点同理,割边也是如此,如果去掉一条边,能让无向图变成多个子图,那么这条边叫做割边,所谓的桥。 那么tarjan是如何求的割点的呢?如果u为割点,当且仅当满足下面的1/21、如果u为树根,那么u必须有多于1棵子树2、如果u不为树根,那么(u,v)为树枝边,当Low[v]>=
2012-10-23 23:40:45
7080
1
原创 poj-1236--一起学习强连通分量2
上一篇介绍过题目大意和kosaraju算法本篇介绍tarjan算法。引用一下讲解: 概述此算法以一个有向图作为输入,并按照所在的强连通分量给出其顶点集的一个划分。图中的每个结点只在一个强连通分量中出现,即使是在有些结点单独构成一个强连通分量的情况下(比如图中出现了树形结构或孤立结点)。算法的基本思想如下:任选一结点开始进行深度优先搜索(若深度优先搜索结束后仍有未访问的结
2012-10-22 21:58:30
1294
原创 poj-1236-一起学习强连通分量
题目不是很好理解,简单说一下就是有一个有向图,第一问求至少要复制几次软件,才能保证每个地方都有,实际上就是求入度为0的,也就是走不到的。第二问求至少添加几个扩展,也即是添加几条边,让无论从那个地方,都能让任何地方得到软件。也就是添加几条边,能让整个图强连通。 强连通分量算法1---kosaraju最好理解的两次dfs。步骤概要:1. DFS有向图G,并以后根序记录节点2.
2012-10-22 21:23:51
1291
原创 poj3009(好久不见)
不知不觉,有两个月没写博客了。惭愧。。。好久不练,果然手生,今天做了一题,搞了一个多小时,各种问题。题目意思很简单,一个图一个起点一个终点,中间有些block阻碍,可以向上下左右扔球,求从起点到终点最少扔多少次。 扔的规则,如果周围靠着阻碍,不能扔,如果没有,那么可以扔,碰到阻碍,阻碍消失,球停在那里。如果那个方向一个阻碍都没有,那么就game over。 最关键是最多扔1
2012-10-17 20:59:09
1196
原创 poj1463-1A
题目大意,有一些节点,节点间有路,节点上放哨兵可以监视和此节点直接连接的节点。求用最少的哨兵,监视所有的节点,没有盲区。。。。 其实一看就知道是一个dp,01背包。每个节点上只有两种情况,放或者不放,按平时来说就是简单的dp,但是这次是一个树,所以要在树上做01背包。 状态方程很好想:dp【i】【0】表示第i点不放哨兵dp【i】【1】表示第i点放哨兵那么我们知道:d
2012-08-18 02:00:43
1713
原创 MultiByteToWideChar和WideCharToMultiByte用法
MultiByteToWideChar概述函数原型: int MultiByteToWideChar( UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cchMultiByte, LPWSTR lpWideCharStr, int cchWide
2012-08-15 23:47:35
1161
原创 poj1947-第一道树形dp,哎,欲哭无泪
第一道树形dp,欲哭无泪。 不知道如何说,首先对树学习的不深,大学上课的时候这些东西考试内容很固定,学的时候又有点吃力,所以学的不是很深。其次对于dp,其实也就是计算里面的迭代,但是这个方面确实博大精深,我曾经也是浅尝则止,导致此题感觉越发困难。最后递归,这是我学习过程中,认为最不好理解的一个算法,很难想象,但是递归之美不是让你去想象,而是去分析,如何才能递归。。。 然而这道题目,这三
2012-08-15 23:05:00
2884
原创 poj1364-还是建模
根据题意此题是 的关系,但是若是想用差分约束,必须是>= 或者题目给出条件是整数,这就是提示,所以如果>c那么就>=c-1,同理知道了这,直接判有没有负环就行了,不要忘了多加一个源点,保持图的联通性。。。。 代码: #include #define maxN 205//最大顶点数,这里是s[i]#define inf 0x7fffffffstruct Edg
2012-08-01 16:25:54
852
原创 poj1275 差分约束难再建模
题意;Tehran的一家每天24小时营业的超市,需要一批出纳员来满足它的需要。超市经理雇佣你来帮他解决他的问题——超市在每天的不同时段需要不同数目的出纳员(例如:午夜时只需一小批,而下午则需要很多)来为顾客提供优质服务。他希望雇佣最少数目的出纳员。经理已经提供你一天的每一小时需要出纳员的最少数量——R(0), R(1), ..., R(23)。R(0)表示从午夜到上午1:00需要出
2012-07-31 21:53:14
3491
原创 poj-3159很神奇的一题-差分约束+spfa
这道题目和前面几篇思路一样,不用多说 问题是如果用spfa+队列,肯定tle,换为堆栈就可以了,这题目也就是从头不行,要从尾部开始,就是队列和栈的区别了。 总感觉这题有问题。正向超时,反向484ms。。。。代码:#include #define maxN 30005//最大边条数#define inf 0x7fffffff//最大距离struct Edge {
2012-07-28 09:42:01
777
原创 poj1716-差分约束+spfa
这题目和上题目1201一样,就只改一下权重。注意一点,这题目边比较多,哎,我开搭配100*10005,过了。后来想改为循环队列,没想到原来while(head 其他没什么了。。。总之记住一个原则,求最小值,>=,求最长路。求最大值,代码:#include #define maxN 10005//最大边条数#define inf 0x7fffffff//最大距离stru
2012-07-28 09:41:52
752
蓝牙HCI驱动开发中的BCMMD协议
2011-07-22
Csr_bluetooth_driver技术文档
2011-07-22
蓝牙HCI驱动开发中的BCSP和bccmd协议
2011-07-22
pojcodefor(2000-2999)
2011-04-21
pojcodefor(1000-1099)
2011-04-21
pojcodefor(1100-1199)
2011-04-21
pojcodefor(1200-1999)
2011-04-21
pojcodefor(3000-3799)
2011-04-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅