上一页 1 2 3 4 5 6 ··· 15 下一页
摘要: 题意:给出N*M的01矩阵(N<12&&M<12),0不可以种草,1可以种草,要求种的草不能相邻(不可以共享一个边),问有多少种种法第一道状压DP,应该来说不算难,看了这个博客,受益很大 http://www.cnblogs.com/ka200812/archive/2011/08/11/2135607.html注:DFS的话,2的次方级,会爆的。 由题目的特点,下一行只受上一行的影响,而且还有重复计算(下一行的某一状态的数量由上一行得来),说的那么乱呢,看连接的博客吧,讲的真不错1.判断一个二进制数有没有相邻的两位同为1的方法 i&(1<<1) 阅读全文
posted @ 2012-10-05 20:59 快乐. 阅读(138) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2817二分法,时间复杂度 O(logn)用两个模版,非递归的用时少,但是不太理解。。。好吧,等比数列又名几何数列 等差数列又名算术序列 arithmetic or geometric sequences两个最基本公式:(A*B)%C = ((A%C)*(B%C))%C 和 (A+B)%C = ((A%C)+(B%C))%C递归// 15MS#include<iostream>#include<cstdio>#include<cstring>#include<strin 阅读全文
posted @ 2012-10-04 00:00 快乐. 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 欧拉函数欧拉函数+预处理题目大意:给定两个整数a,b,计算a、b之间的欧拉函数值。算法分析:定义:对于正整数n,φ(n)是小于或等于n的正整数中,与n互质的数的数目。 例如:φ(8) = 4,因为1,3,5,7均和8互质。性质:1.若p是质数,φ(p) = p-1. 2.若n是质数p的k次幂,φ(n) = (p-1)*p^(k-1)。因为除了p的倍数都与n互质 3.欧拉函数是积性函数,若m,n互质,φ(mn) = φ(m)φ(n). 根据这3条性质我们就可以推出一个整数的欧拉函数的公式。因为一个数总可以写成一些质数的乘积的形式。 E(k) = (p1-1)(p2-1)...(... 阅读全文
posted @ 2012-10-03 21:05 快乐. 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 素数筛http://blog.csdn.net/guiyinzhou/article/details/6437990 由于一个合数总是可以分解成若干个质数的乘积,那么如果把质数(最初只知道2是质数)的倍数都去掉,那么剩下的就是质数了。例如要查找100以内的质数,首先2是质数,把2的倍数去掉;此时3没有被去掉,可认为是质数,所以把3的倍数去掉;再到5,再到7,7之后呢,因为8,9,10刚才都被去掉了,而100以内的任意合数肯定都有一个因子小于10(100的开方),所以,去掉,2,3,5,7的倍数后剩下的都是质数了。用程序可以这样解决,引入布尔类型数组a[i],如果i是质数,a[i]=true,否 阅读全文
posted @ 2012-10-03 21:04 快乐. 阅读(244) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2777题意:给出一段区间L ,T种颜色,O种操作(1 <= L <= 100000), T(1 <= T <= 30) , (1 <= O <= 100000).,初始时颜色都是染第一种颜色,然后再修改一些区间的颜色,给出一段区间,问这段区间内有多少种颜色。1 .线段树的一个很重要的部分就是节点存的内容,除了l,r,c外还有一个state(该段区间有多少种颜色),开始没state还超时了,加了一个剪枝勉强过,可是30种染色,用二进制存的话,效率很高,所以改成了二进制2. 更新时的下传和上传,very重要代 阅读全文
posted @ 2012-08-20 21:28 快乐. 阅读(133) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2352题意:给出N(0~15000)个点的坐标,每个点左下点的个数为该点的高度,问高度为0~N-1的点个有多少个左下。。。看起来很没思路,因为是二维坐标,但是仔细想想,把y值相同的点看成一层,一层一成的往上求就是了用树状数组,感觉计算和的这种用树状数组比线段树好写多了代码:#include<iostream>#include<cstdio>#include<cstring>#include<string>#define nMAX 32100using namespace std;int ans 阅读全文
posted @ 2012-08-20 21:21 快乐. 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 题意:一个矩阵,有的方格里有一些敌人,每行或每列都可以安放一架枪,每架枪都有一个花费,而且能消灭他所在的行或列的所有敌人,最后的花费为所有的枪话费的乘积分析:如果是至少安放几个枪的话,直接就是最小点覆盖;如果求和最小的话,KM就可以解决,但是球的是product 乘积。。。 log(x)就可以转成求和了。。。用最小割或KM均可dinic代码:#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<cmath>#define inf 9999 阅读全文
posted @ 2012-08-18 17:41 快乐. 阅读(144) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1195题意:给出一个矩阵,给某个格子加/减一个数,就某个子矩阵的和,1024*1024的范围,二维的树状数组子矩阵(x1,y1,x2,y2)(左下角的点和右上角的点)的和ans=sum(x2,y2)-sum(x1-1,y2)-sum(x2,y1-1)+sum(x1-1,y1-1)代码:#include<iostream>#include<cstdio>#include<cstring>#include<string>#define nMAX 1050using namespace std;in 阅读全文
posted @ 2012-08-17 21:46 快乐. 阅读(117) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3321题意:给出一颗苹果树,开始每个树叉上都有 一个苹果,苹果树总是以1为根,Q 1表示1树枝上有多少苹果,C 2表示更新树枝2上的苹果,以前有苹果变成没有,以前没有变成有,树杈上的苹果数不超过1分析:插入,删除频繁,还需要算和,10^5的数据量,用线段树或树状数组,但是给出的是一棵树,不在一条线上。。。有时候不能看出什么是区间,就要仔细观察,造出“区间”,如果从1根节点出发,dfs遍历树一遍,那遍历每个节点的时间是一条线,把时间划成区间。。。每个节点有两个时间戳,low[]表示开始时间,high[]表示结束时间。那么这个树枝上苹果的个数就 阅读全文
posted @ 2012-08-17 20:24 快乐. 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 题意:有N个砝码(1<=N<=1000),每个砝码的重量(0~2^31),这些砝码有一些特点,每一个砝码的重量大于等于前两个砝码的和,给出一个重量C,要求任选一些砝码组合,组合的重量不超过C而且尽量大,求组合的数值。因为砝码的特点 f[n]>=f[n-2]+f[n-1],由斐波那契数列知N最多45、46项,所以1000是唬人的,如果用背包10^9数组开不出来,而且10^9*45超时,用dfs所搜,但是2^46也超时,加强剪枝代码:#include<iostream>#include<cstdio>#include<cstring>#incl 阅读全文
posted @ 2012-08-16 11:48 快乐. 阅读(230) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 15 下一页