08 2016 档案

摘要:/*UVa 140 140 - Bandwidth ---数据量比较小,可以直接用next_permutation来枚举全排列,依次计算每一个排序的b(i),求出最小即可 ---在枚举时,注意到在计算某一个排列的带宽过程中,如果发现某两个节点的带宽大于当前总的最小带宽k ---则可以直接剪掉。 */ #define _CRT_SECURE_NO_DEPRECATE #include #inclu... 阅读全文
posted @ 2016-08-30 16:57 曹孟德 阅读(159) 评论(0) 推荐(0)
摘要:/*UVa129 - Krypton Factor --回溯问题。看例子可知道确定该字符串是按照从左到右依次考虑每个位置,当前位置填不上所有的字符时,需要回溯。 -- */ #define _CRT_SECURE_NO_DEPRECATE #include #include #include #include using namespace std; const int maxn = 1000;... 阅读全文
posted @ 2016-08-30 14:42 曹孟德 阅读(155) 评论(0) 推荐(0)
摘要:回溯法:在递归构造中,生成和检查的过程可以有机结合起来,从而减少不必要的枚举。把问题分解为若干个步骤求解时,如果当前步骤没有合法选择,则函数将返回上一级的递归调用,该现象称为回溯法。所以递归枚举通常被称为回溯。 8皇后问题:在8*8的棋盘上放置了8个皇后,使得他们互不攻击,每个皇后的攻击范围为同行, 阅读全文
posted @ 2016-08-30 10:45 曹孟德 阅读(398) 评论(0) 推荐(0)
摘要:#define _CRT_SECURE_NO_DEPRECATE #include #include #include using namespace std; const int maxn = 50; int a[maxn]; bool vis[maxn]; void permutation(int *a,int curr,int n){ if (curr == n){ for (... 阅读全文
posted @ 2016-08-30 10:08 曹孟德 阅读(175) 评论(0) 推荐(0)
摘要:采用二进制进行集合枚举: 例如可以用二进制表示集合{2,3,6,1,7},二进制第i位对应集合第i个元素,1代表在,0代表不在集合中。上述集合全集为s=111112=31,例如子集A={2,1,7}可以表示为: 100112=25.而B={2,3,6,7}可以表示为:111012=23,.下面利用位 阅读全文
posted @ 2016-08-29 20:35 曹孟德 阅读(394) 评论(0) 推荐(0)
摘要:/*UVa 12716 - GCD XOR ---gcd(a,b)=c = a xor b,由于异或运算满足a xor c=b,而c是a的约数,可以枚举a,c,枚举a,c可以采用素数筛法类似思想 ---时间复杂度n/1+n/2....+n/n=O(nlogn)。这个时候枚举a,c,用b= a xor c计算出b,然后去判断c是否等于gcd(a,b),考虑 ---到计算最大公约数复杂度O(logn... 阅读全文
posted @ 2016-08-25 15:09 曹孟德 阅读(336) 评论(0) 推荐(0)
摘要:/*UVa10791 - Minimum Sum LCM ---不难发现,最优情况就是将该数素因子分解 ---需要注意几点: 1)n==1时应该输出2 2)当只有一个素因子或者没有除本身以外的素数因子时,答案等于本身+1 */ #define _CRT_SECURE_NO_DEPRECATE #include #include #include #include using names... 阅读全文
posted @ 2016-08-25 12:44 曹孟德 阅读(120) 评论(0) 推荐(0)
摘要:/*UVa10375 - Choose and divide --考查素数因子唯一分解定理。将x!分解成素数因子,然后再进行相乘约分。考虑效率问题:组合数公式进行化简: C(m,n)=m*(m-1)*...(m-n+1)/n!来计算. */ #define _CRT_SECURE_NO_DEPRECATE #include #include #include #include using na... 阅读全文
posted @ 2016-08-24 16:58 曹孟德 阅读(117) 评论(0) 推荐(0)
摘要:/*UVa12169 - Disgruntled Judge --a,b都在10000以内,这样可以枚举a的值,然后根据x1和x3计算出b的值,再遍历数组X判断他们是否合法 --很容易得到x3=(a*a*x1+(a+1)*b)%10001;变形一下可以得到:(a+1)*b+10001*k=x3-a*a*x1;直接利用扩展欧几里得算法 求解b在[0,10000]的唯一解。 */ #define _... 阅读全文
posted @ 2016-08-24 15:10 曹孟德 阅读(199) 评论(0) 推荐(0)
摘要:/*UVa11582 - Colossal Fibonacci Numbers! ---首先所有数都是对n取模运算的,设F[i]=f(i)%n,则当二元组(F[i],F[i]+1)重复时整个序列就会出现周期循环, ---对n取模可知最多有n种余数,而二元组合最多有n^2种,所以只需要最多打长度为n^2的表就可以找到周期T。 ---需要注意以下几点: 1)n==1时候需要特判,所有数都可以... 阅读全文
posted @ 2016-08-24 13:05 曹孟德 阅读(230) 评论(0) 推荐(0)
摘要:取模公式: (a+b) mod n=((a mod n)+(b mod n))%n (a-b) mod n=(a mod n -b mod n +n)mod n a*b mod n =(a mod n)*(b mod n)mod n 1大整数取模:输入n,m求n%m,其中n<=10^1000000, 阅读全文
posted @ 2016-08-24 09:52 曹孟德 阅读(258) 评论(0) 推荐(0)
摘要:定理:对不全为0的数a,b,存在整数x,y使得 ax+by=gcd(a,b) 可使用扩展欧几里得算法来求解x,y 1.求解二元不定方程 ax+by=n 结论:方程有解得充分必要条件是gcd(a,b)|n.若(x0,y0)是方程的一组解,则方程全部解可以表示为:x=x0+b*k,y=y0-a*k, ( 阅读全文
posted @ 2016-08-23 17:59 曹孟德 阅读(245) 评论(0) 推荐(0)
摘要:/*给出正整数n,m(n #include using namespace std; const int maxn = 10000000+10; bool squre[maxn]; //筛去[n,m]中平方因子数 //线性复杂度的Euler素数筛法构造素数表 bool vis[maxn]; int prime[maxn]; int Euler(int n){ memset(vis, 0,... 阅读全文
posted @ 2016-08-23 16:38 曹孟德 阅读(1870) 评论(0) 推荐(0)
摘要:/*---UVa 1218 - Perfect Service ---首先对状态进行划分: ---dp[u][0]:u是服务器,则u的子节点可以是也可以不是服务器 ---dp[u][1]:u不是服务器,但u的父节点是服务器,则u的所有儿子节点都不是服务器 ---dp[u][2]:u和u的父亲都不是服务器,则u的儿子恰好有一个是服务器 ---状态转移方程: ---dp[u][0]=sum{min(... 阅读全文
posted @ 2016-08-23 12:42 曹孟德 阅读(468) 评论(0) 推荐(0)
摘要:/*poj 2324 Anniversary party(树形DP) ---用dp[i][1]表示以i为根的子树节点i要去的最大欢乐值,用dp[i][0]表示以i为根节点的子树i不去时的最大欢乐值, ---于是当i去时,i的所有儿子都不能去:dp[i][1]=sum(dp[j][0])+a[i],其中j是i的儿子节点。 ---当i不去时,i的儿子可去也可不去:dp[i][0]=sum(max(d... 阅读全文
posted @ 2016-08-22 19:37 曹孟德 阅读(132) 评论(0) 推荐(0)
摘要:一元线性回归模型: 一元线性回归分析的主要任务是: 解得: 三、检验、预测与控制: 1)F检验法: 2)t检验法 3)r检验法 3预测: 四、可线性化的一元非线性回归(曲线回归):曲线线性回归需要配置曲线 统计工具箱中的回归分析命令: 1、多元线性回归 2、多项式回归 3、非线性回归 4、逐步回归 阅读全文
posted @ 2016-08-21 17:11 曹孟德 阅读(200) 评论(0) 推荐(0)
摘要:遗传算法(Genetic Algorithm 简称GA)起源于对生物系统所进行的计算机模拟研究,是由一种基于生物遗传和进化机制的适合于复杂系统优化的自适应概率优化算法。 特点:不依赖于梯度信息,不仅不受目标函数连续可微的约束,还可以通过编码来实现任意设定其定义域。 原理:遗传算法从代表问题可能潜在解 阅读全文
posted @ 2016-08-21 15:52 曹孟德 阅读(2130) 评论(0) 推荐(0)
摘要:/*---UVa 11584 Partitioning by Palindromes --用dp[i]表示前i个字母划分成最小回文串的个数,则有dp[i]=min{dp[j]+1}s[j+1...i]是一个回文串,状态O(n)个 每次有O(n)个决策,而判断是否是回文串复杂度O(n),这样总的复杂度O(n^3).如果事先预处理标记一下s[i...j]是否构成 回文串,这样总的复杂度O(n^2)。... 阅读全文
posted @ 2016-08-20 21:26 曹孟德 阅读(155) 评论(0) 推荐(0)
摘要:/*----UVa1625 Color Length --用dp[i][j]表示当前两个串分别移走到第i和第个元素j时所获得的目标函数最优值,首先计算出两个序列中的每个元素开始和 结束的位置,在计算dp[i][j]的同时,还需要记住当前有多少颜色已经开始但是没有结束,这样不必关心每一个元素的L(c), 在程序递进计算的同时,只需要每次累加已经开始还没结束的元素个数即可。 */ #define _... 阅读全文
posted @ 2016-08-20 21:24 曹孟德 阅读(237) 评论(0) 推荐(0)
摘要:考虑d(i,j)表示切割点i到j这段距离的最小花费,于是d(i,j)=min(d(i,k)+d(k,j))+a[j]-a[i] ,其中j<k<i,边界条件d(i,i)=d(i,i+1)=0,最终求d(0,n+1),复杂度o(n^3),可采用记忆化搜索。 阅读全文
posted @ 2016-08-20 21:22 曹孟德 阅读(218) 评论(0) 推荐(0)
摘要:/*----UVa1347 ---首相两边方向走不方便,可以看做:两个人同时从最左边出发,沿着两条不同路径走到终点,除了起点和中点外 其他点恰好被走过一遍 ---用dp[i][j]表示1-max(i,j)全部走过,且两人当前位置为i和j,还需要走多少距离。考虑到d[i][j]==dp[j][i],以下规定 i>j,此时后状态dp[i][j]只可以转移到dp[i+1][j]和dp[i+1][i](... 阅读全文
posted @ 2016-08-19 10:17 曹孟德 阅读(139) 评论(0) 推荐(0)
摘要:/*----UVa1347 单向TSP 用d(i,j)表示从格子(i,j)出发到最后一列的最小开销 则在(i,j)处有三种决策,d(i,j)转移到d(i-1,j+1),d(i,j+1),d(i+1,j+1),还需要一个数组来记录每一步决策过程 */ #define _CRT_SECURE_NO_DEPRECATE #include #include #include #include #incl... 阅读全文
posted @ 2016-08-19 10:15 曹孟德 阅读(294) 评论(0) 推荐(0)
摘要:分析可知,虽然t<109,但是总曲目时间大于t,实际上t不会超过180*n+678.此问题涉及到两个目标信息,首先要求曲目数量最多,在此基础上要求所唱的时间尽量长。可以定义 状态dp[i][j]表示前i首歌曲,恰好唱的时间为j时,所唱的最长时间,于是就是裸的01背包了。 阅读全文
posted @ 2016-08-19 10:10 曹孟德 阅读(136) 评论(0) 推荐(0)
摘要:一 确定权重的方法:层次分析法,德尔菲法,变异系数法,均方差法。 主要学习方法:层次分析法 二 层次分析法 1.将问题因素分层,并条理化,逻辑化,理出层次结构 1)目标层(最高层):指决策的目的,要解决的问题 2)准则层(因素层):考虑的因素,目标决策的准则 3)方案层(最低层):目标决策的方案层 阅读全文
posted @ 2016-08-18 16:04 曹孟德 阅读(2308) 评论(0) 推荐(1)
摘要:此问题与求上升序列最大和类似,可以作为DAG模型计算。将每一快砖分解为3块,将所有砖块按照底排序,注意sort排序中涉及到底的两个参数x,y,这时候一定要有优先排,比如先排x再排y,不能同时排x和y,下面排序写法是错误的: 阅读全文
posted @ 2016-08-18 12:43 曹孟德 阅读(156) 评论(0) 推荐(0)
摘要:用dp[i][j]表示i时刻在车站j还需要等待的最小时间。很容易得到边界条件dp[T][n]=0,dp[T][1...n-1]=INF;我们要求的便是dp[0][1].考虑每次的三个决策: 1)等待1分钟 2)搭乘向右的车(如果有) 3)搭乘向左的车(如果有) dp[i][j]=max(dp[i+1 阅读全文
posted @ 2016-08-17 20:16 曹孟德 阅读(142) 评论(0) 推荐(0)
摘要:利用叉积按照逆时针方向进行极角排序, 阅读全文
posted @ 2016-08-13 11:07 曹孟德 阅读(454) 评论(0) 推荐(0)
摘要:参考博客http://www.cppblog.com/aswmtjdsj/archive/2011/09/04/155049.aspx 维护4根双扫描线,左右和上下。暴力枚举,复杂度O(n^2). 阅读全文
posted @ 2016-08-13 09:08 曹孟德 阅读(186) 评论(0) 推荐(0)
摘要:一道状态压DP题目。将每一行进行编码,1表示种0表示不种。首先求解出每一行合法的状态集合。对于第i行状态j,如果j&(j<<1)==0并且对于该行为0的地方j在当前位的二进制也是0,则表明状态j合法。用dp[i][j]表示第i行状态为j时(j合法的)的方法数,得到状态转移方程如下: dp[i][j] 阅读全文
posted @ 2016-08-12 11:48 曹孟德 阅读(179) 评论(0) 推荐(0)
摘要:首先线段树每一个节点包含:[b,e],lmax,rmax,max;其中lmax表示从左端点开始连续的最长的增序列长度,rmax表示从e端点开始向左连续的最长下降序列长度,max表示当前区间的连续递增的最长序列长度。对单个节点插入时的信息维护如下: (1) if 左儿子的右端点的值<右儿子的左端点的值 阅读全文
posted @ 2016-08-12 11:41 曹孟德 阅读(263) 评论(0) 推荐(0)
摘要:1.http://acm.hdu.edu.cn/showproblem.php?pid=5112 2.http://acm.hdu.edu.cn/showproblem.php?pid=5122 一开始一看到以为求逆序来搞,一看题就写了个数状数组,nlogn超时了。当然一定是太性急了,这个题其实就是 阅读全文
posted @ 2016-08-10 17:14 曹孟德 阅读(152) 评论(0) 推荐(0)
摘要:一.圆与圆的位置关系 1.两圆交的面积 两圆如果相交,则交的面积是一个弓形。考虑到两个圆相交的面积只与圆心距相关。我们可以对圆进行平移旋转,使得两个圆的圆心分别为(0,0)和(d,0). 模板如下: 2.两圆交点 两圆位置关系一共有5中。我们将其归纳为3种,0个交点,个交点,1个交点,2个交点.并且 阅读全文
posted @ 2016-08-10 11:20 曹孟德 阅读(278) 评论(0) 推荐(0)
摘要:题目中给出的h和w范围均大,其实n的最大范围才200000,所以我们建立的线段树大小为min(h,n),线段树的每一个节点包含一个变量c,记录当前区间内还剩下的可以put on的最大长度。插入一个数时,如果该数大于该区间最大值,则返回-1,说明put on不了。否则将它插入到页节点,并返回插入的下标 阅读全文
posted @ 2016-08-07 23:47 曹孟德 阅读(181) 评论(0) 推荐(0)
摘要:一.射线判别法:适用于所有简单多边形 简单多边形是不相邻的边不相交的多边形。判定点p是否在多边形G内部,包括边界。对于任意多边形,可以采用射线法。对于给定的点向左做一条平行x轴的射线l,求出l与多边形G的交点个数,如果个数为奇数则点在多边形内,如果交点个数为偶数则点在多边形外。具体可以归纳如下: 1 阅读全文
posted @ 2016-08-07 23:01 曹孟德 阅读(1686) 评论(0) 推荐(0)
摘要:/* 背包问题模板 【若要求恰好装满,初始化时f[1...V] = -1(求最大)而f[0] = 0】 */ #include #include using namespace std; const int M = 1000; int c[M], w[M], nl[M];//c:费用 w:价值 n1:数量 int f[M];//f[与V有关],c和w[与n]有关 int v, V, V1;/... 阅读全文
posted @ 2016-08-07 20:28 曹孟德 阅读(166) 评论(0) 推荐(0)
摘要:字典树又称为单词查找树。用于统计排序大量字符串(不限于字符串),利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。字典树的性质: 1.根节点不包含任何字符(空根节点) 2.从根节点到某一节点路径上的字符连起来就是一个字符串 3.每个节点的所有子节点包含的字符串不 阅读全文
posted @ 2016-08-07 12:50 曹孟德 阅读(166) 评论(0) 推荐(0)
摘要:A.http://acm.hdu.edu.cn/showproblem.php?pid=5538 求表面积,只需要将所有的1*1的小块扫描一遍。将每一个块与他相邻四周进行比较,如果该快高度大,则将该快高度减去周围块高度然后累加。复杂度O(nm) 2.http://acm.hdu.edu.cn/sho 阅读全文
posted @ 2016-08-06 06:43 曹孟德 阅读(165) 评论(0) 推荐(0)
摘要:呵呵哒。WA了无数次,一开始想的办法最终发现都有缺陷。首先需要知道: 1)线段不相交,一定面积为0 2)有一条线段与X轴平行,面积一定为0 3)线段相交,但是能接水的三角形上面线段把下面的线段完全覆盖。 (1),(2)的情况简单,主要是解决(3)。下面对(3)进行讨论,如下图所示,设p1,p2是两线 阅读全文
posted @ 2016-08-04 08:44 曹孟德 阅读(335) 评论(0) 推荐(0)
摘要:计算多边形面积就是通过拆分三角形的方法,即为选取任意一个点,从该点出发,连接多边形的每一个顶点,这样就将多边形分为了许多个三角形。计算每一个三角形的面积即可,用叉积计算的每一个三角形的面积为"有向面积",直接将所有三角形的有向面积相加,结果的绝对值就是多边形的面积。 阅读全文
posted @ 2016-08-04 08:15 曹孟德 阅读(260) 评论(0) 推荐(0)
摘要:线段树成段更新需要用到延迟标记(或者说懒惰标记),简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候。延迟标记的意思是:这个区间的左右儿子都需要被更新,但是当前区间已经更新了。其主要使用了Lazy思想。 Lazy思想:lazy-tag思想,记录每一个线段树节 阅读全文
posted @ 2016-08-02 09:32 曹孟德 阅读(165) 评论(0) 推荐(0)
摘要:线段树是一颗二叉搜索树,与普通二叉搜索树不同的是,线段树是按照对象的关键码的可能范围来进行划分的。线段树也是按照递归定义的。设一个区间b,e],则: 1)若b-e==1,那么T(b,e)是叶子节点 2)如果 b-e>1,那么T(b,(b+e)/2)是左子树,T((b+e)/2,e)是右子树。 如下是 阅读全文
posted @ 2016-08-02 08:55 曹孟德 阅读(302) 评论(0) 推荐(0)
摘要:待更新。。。 阅读全文
posted @ 2016-08-02 08:09 曹孟德 阅读(157) 评论(0) 推荐(0)