算法
inlcude_cx
这个作者很懒,什么都没留下…
展开
-
背包问题小结
1.引子 我们人类是一种贪婪的动物,如果给您一个容量一定的背包和一些大小不一的物品,裝到背包里面的物品就归您,遇到这种好事大家一定不会错过,用力塞不一定是最好的办法,用脑子才行,下面就教您如何解决这样的问题,以获得更多的奖品。2.应用场景 在一个物品向量中找到一个子集满足条件如下 : 1)这个子集加起来的体积大小不能大于指定阀值 2) 这个物品子集加起来价值大小是向量V中原创 2012-12-05 17:06:54 · 364 阅读 · 0 评论 -
大整数运算模板(减法)
大整数减法(str_a - str_b = str_c)#include#include#define N 1009void sub(char str_a[],char str_b[],char str_c[]){ char a[N],b[N],c[N]; int i,len_a,len_b,len; memset(a,0,sizeof(a)); memset(b,0,sizeo原创 2012-12-05 17:09:07 · 406 阅读 · 0 评论 -
最长上升子序列(LIS)算法分析(做…
有两种算法复杂度为 O(n*logn) 和 O(n^2)O(n^2)算法分析如下: (a[1]...a[n] 存的都是输入的数)1、对于a[n]来说.由于它是最后一个数,所以当从a[n]开始查找时,只存在长度为1的上升子序列;2、若从a[n-1]开始查找.则存在下面的两种可能性:(1)若a[n-1] < a[n] 则存在长度为2的上升子序列 a[n-1]、a[n];(2)若a[原创 2012-12-05 17:11:35 · 355 阅读 · 0 评论 -
POJ 3295 Tautology(似乎是模拟?…
题目链接:http://poj.org/problem?id=3295 题意:现规定K,A,N,C,E五种运算,p,q,r,s,t为五个只有0和1状态的变量,给定一个含有这几个字符的字符串,判断无论p,q,r,s,t的取值,结果是否均为真(即永真式) 哭死了,发现这个题目无论怎么写,用c和c++提交均WA,Gcc和G++就对了,郁闷,以为只是用了位运算才这样呢,没想到没用位运算也是WA原创 2012-12-05 17:15:26 · 392 阅读 · 0 评论 -
用递归的方法实现全排列
举例说明,排头为1时:Perm(1,4) : forj=1 to 4 j=1:P[1]与P[1]互换 1 2 3 4 Perm(2,4) : for j=2 to 4 j=2: P[2]与P[2]互换 1 2 3 4 Perm(3,4原创 2012-12-05 17:06:56 · 366 阅读 · 0 评论 -
背包九讲之一 P01: 01背包问题
题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w原创 2012-12-05 17:06:58 · 237 阅读 · 0 评论 -
背包问题之六 P06: 分组的背包问…
问题有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。算法这个问题变成了每组物品有若干种策略:是选择本组的某一件,还是一件都不选。也就是说设f[k][v]表示前k组物品花费费用v能取得的最大权值,则有:f[k][v]=ma原创 2012-12-05 17:07:09 · 259 阅读 · 0 评论 -
背包问题之八 P08: 泛化物品
定义考虑这样一种物品,它并没有固定的费用和价值,而是它的价值随着你分配给它的费用而变化。这就是泛化物品的概念。更严格的定义之。在背包容量为V的背包问题中,泛化物品是一个定义域为0..V中的整数的函数h,当分配给它的费用为v时,能得到的价值就是h(v)。这个定义有一点点抽象,另一种理解是一个泛化物品就是一个数组h[0..V],给它费用v,可得到价值h[V]。一个费用为c价值为w的原创 2012-12-05 17:07:13 · 518 阅读 · 0 评论 -
hdu 1466 计算直线的交点数 第四专…
Problem Description平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。Input输入数据包含多个测试实例,每个测试实例占一行,每行包含一个正整数n(nOutput每个测试实例对应一行输出,从小到大列出所有相交方案,其中每个数为可能的交点数,每行的整数之间用一个空格隔开。Sample In原创 2012-12-05 17:08:02 · 331 阅读 · 0 评论 -
算法——博弈论:取石子游戏
有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。 (一)巴什博奕(BashGame):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。显然,如果n=m+1,原创 2012-12-05 17:09:05 · 2292 阅读 · 0 评论 -
大整数运算(加法)
大整数加法(str_a+str_b=str_c)#include#include#define N 1009void add(char str_a[],char str_b[],char str_c[]){ chara[N],b[N],c[N]; inti,sum,len_a,len_b,len,carry; memset(a,0,sizeof(a));原创 2012-12-05 17:09:09 · 550 阅读 · 0 评论 -
二分匹配
图采用矩阵存储,下标从1开始。匈牙利匹配算法的理论和证明不复杂,就是不断寻找两个端点都是未浸润点的交替路径,把路径上的边匹配状态全部取反。每次操作,图的匹配数都增加1。为方便描述,将二部图划分为X和Y两个部集。此算法有几个性质:1.算法只需以某一个部集(可以是X或Y)中的所有未浸润点为交替路径的起始点,展开寻找。2.X中的某个点,只有在以它为起始点进行过交替路径搜索后,才有可能变为浸润原创 2012-12-05 17:14:32 · 371 阅读 · 0 评论 -
全排列 不重复算法
#includeint a[10],n,count;void sequence(int k){ int i,tmp; if(k==n) { printf("Case %5d:",++count); for(i=0;i<n;i++) printf("%d%c",a[i],i==n-1 ? '\n' : ' '); return; }原创 2012-12-13 18:36:22 · 1051 阅读 · 0 评论 -
教你透彻了解红黑树[转载]
作者:July、saturnman 2010年12月29日本文参考:Google、算法导论、STL源码剖析、计算机程序设计艺术。推荐阅读:Left-Leaning Red-Black Trees,Dagstuhl Workshop on Data Structures, Wadern, Germany, February, 2008.直接下载:http://www.cs转载 2013-04-27 11:31:53 · 694 阅读 · 0 评论 -
背包问题之五 P05: 二维费用的背…
问题二维费用的背包问题是指:对于每件物品,具有两种不同的费用;选择这件物品必须同时付出这两种代价;对于每种代价都有一个可付出的最大值(背包容量)。问怎样选择物品可以得到最大的价值。设这两种代价分别为代价1和代价2,第i件物品所需的两种代价分别为a[i]和b[i]。两种代价可付出的最大值(两种背包容量)分别为V和U。物品的价值为w[i]。算法费用加了一维,只需状态也加一维即可。设f[原创 2012-12-05 17:07:07 · 343 阅读 · 0 评论 -
背包问题之四 P04: 混合三种背包…
问题如果将P01、P02、P03混合起来。也就是说,有的物品只可以取一次(01背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包)。应该怎么求解呢?01背包与完全背包的混合考虑到在P01和P02中给出的伪代码只有一处不同,故如果只有两类物品:一类物品只能取一次,另一类物品可以取无限次,那么只需在对每个物品应用转移方程时,根据物品的类别选用顺序或逆序的循环即可,原创 2012-12-05 17:07:04 · 272 阅读 · 0 评论 -
背包问题之九 P09: 背包问题问法…
以上涉及的各种背包问题都是要求在背包容量(费用)的限制下求可以取到的最大价值,但背包问题还有很多种灵活的问法,在这里值得提一下。但是我认为,只要深入理解了求背包问题最大价值的方法,即使问法变化了,也是不难想出算法的。例如,求解最多可以放多少件物品或者最多可以装满多少背包的空间。这都可以根据具体问题利用前面的方程求出所有状态的值(f数组)之后得到。还有,如果要求的是“总价值最小”“总件数原创 2012-12-05 17:07:15 · 339 阅读 · 0 评论 -
杭电46道DP牛人总结
HDU 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】 收藏Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱最脑残的是把总的概率以为是抢N家银行的概率之和…把状态转移方程写成了f[j]=max{f[j],f[j-原创 2012-12-05 17:08:08 · 1106 阅读 · 0 评论 -
大整数运算(乘法)
大整数乘法(str_a * str_b = str_c)#include#include#define N 1009void Strrev(char str[]){ int i,j=0; char s[1009]; for(i=strlen(str)-1;i>=0;i--) s[j++]=str[i]; s[j]='\0'; strcpy(str,s);}void m原创 2012-12-05 17:09:11 · 425 阅读 · 0 评论 -
背包九讲
P01:01背包问题题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1]原创 2012-12-05 17:11:20 · 314 阅读 · 0 评论 -
博弈论简介
有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。(一)巴什博奕(BashGame):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+原创 2012-12-05 17:13:47 · 496 阅读 · 0 评论 -
几种素数判定方法
(1)最基本素数判定方法大家熟悉,只用看看2到n(或n的平方根)之间有没有n的约数:#includevoid main(){ inti,n; scanf("%d",&n); for(i=2;i if(n%i==0)break; if(i elseputs("Yes");}此方法适用于判定较少数,数据量大时会超时。(2)筛选法求原创 2012-12-05 17:06:24 · 369 阅读 · 0 评论 -
背包九讲之三 P03: 多重背包问题
题目有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本算法这题目和完全背包问题很类似。基本的方程只需将完全背包问题的方程略微一改即可,因为对于第i种物品有n[i]+1种策略:取0件,取1件……取n[i]件。令f[i][v]表示前i种物品恰放入一个容量为v的背包原创 2012-12-05 17:07:02 · 264 阅读 · 0 评论 -
背包问题之七 P07: 有依赖的背包…
简化的问题这种背包问题的物品间存在某种“依赖”的关系。也就是说,i依赖于j,表示若选物品i,则必须选物品j。为了简化起见,我们先设没有某个物品既依赖于别的物品,又被别的物品所依赖;另外,没有某件物品同时依赖多件物品。算法这个问题由NOIP2006金明的预算方案一题扩展而来。遵从该题的提法,将不依赖于别的物品的物品称为“主件”,依赖于某主件的物品称为“附件”。由这个问题的简化条件可知原创 2012-12-05 17:07:11 · 617 阅读 · 0 评论 -
2011年04月22日
动态规划解最长公共子序列问题 收藏动态规划法经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是动态规划法所采用的基本方法。 【问题】 求两字符序列的原创 2012-12-05 17:07:38 · 257 阅读 · 0 评论 -
如何判断一个数是否为素数
这里copy别人的解析:http://www.cnblogs.com/skyaspnet/archive/2010/10/26/1861194.html怎么判断一个数是否为素数?笨蛋的作法: bool IsPrime(unsigned n){ if(n {//小于2的数即不是合数也不是素数 throw0; } for(uns原创 2012-12-05 17:08:30 · 805 阅读 · 0 评论 -
KMP详解~
原文出处 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A="I'mmatrix67",字符串B="matrix",我们就说B是A的子串。你可以委婉地问你的M原创 2012-12-05 17:15:17 · 392 阅读 · 0 评论 -
斐波那契数列的各种求法(终于找全…
斐波那契数列百科名片“斐波那契数列”是意大利数学家列昂纳多·斐波那契首先研究的一种递归数列, 它的每一项都等于前两项之和。此数列的前几项为1,1,2,3,5等等。在生物数学中,许多生物现象都会呈现出斐波那契数列的规律。斐波那契数列相邻两项的比值趋近于黄金分割数。此外,斐波那契数也以密码的方式出现在诸如《达芬奇密码》的影视书籍中。目录[隐藏]【奇妙的属性】【影视链接】【相关的数学问题原创 2012-12-05 17:06:26 · 9451 阅读 · 0 评论 -
背包九讲之二 P02: 完全背包问题
题目有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路这个问题非常类似于01背包问题,所不同的是每种物品有无限件。也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取0件、取1件、取2件……等很多种。如果仍然按照解01背包时的思路,令f[i原创 2012-12-05 17:07:00 · 256 阅读 · 0 评论 -
LeetCode代码迁移
LeetCode的后续代码更新迁移到:Github地址原创 2015-11-26 14:02:42 · 804 阅读 · 0 评论