上一页 1 2 3 4 5 6 7 8 9 10 ··· 25 下一页

【HNOI】矩阵染色 数论

摘要: 【题目描述】一个2*i的矩阵,一共有m种颜色,相邻两个格子颜色不能相同,m种颜色不必都用上,f[i]表示这个答案,求Σf[i]*(2*i)^m (1#define LL long long#define maxp 1010#define maxm 1010using namespace std;int n,m,p,a;int mo[maxp],next[maxp],w[maxm],c[maxm][maxm];int flag[maxp][maxp],f[maxp*maxp],g[maxp*maxp];int mi(int a,int k) { int ans=1; while ... 阅读全文
posted @ 2014-03-25 13:48 BLADEVIL 阅读(661) 评论(0) 推荐(0) 编辑

bzoj 1004 burnside 引理+DP

摘要: 对于burnside引理需要枚举染色,这道题属于burnside的一种简单求解的方法,就是polya,我们可以使每一种置换中的循环节中的元素的颜色都相同,那么这样的话就可以直接DP了,我们可以将m个置换单独考虑,处理出当前置换中各个循环节,那么用w[aa][bb][cc]表示在使用了aa个颜色1,bb个颜色2,cc个颜色3时,我们的轨道数,那么我们可以通过背包来累加答案,w[aa][bb][cc]+=w[aa-b[i]][bb][cc]w[aa][bb][cc]+=w[aa][bb-b[i]][cc]w[aa][bb][cc]+=w[aa-b[i]][bb][cc-b[i]]。 /***... 阅读全文
posted @ 2014-03-25 07:44 BLADEVIL 阅读(390) 评论(0) 推荐(0) 编辑

bzoj 3453 数论

摘要: 首先我们知道对于f(x)来说,它是一个k次的多项式,那么f(x)的通项公式可以表示成一个k+1次的式子,且因为f(x)没有常数项,所以我们设这个式子为 f(x)=Σ(a[i]*x^i) (1#include #include #define LL long long#define maxk 150#define P 1234567891using namespace std;struct mat{int n,m;int a[maxk][maxk];mat (int n,int m):n(n),m(m){memset(a,0,sizeof a);};};int K,S,N,D;int ... 阅读全文
posted @ 2014-03-12 15:41 BLADEVIL 阅读(503) 评论(0) 推荐(0) 编辑

HDU 2899 三分

摘要: 我们对这个函数求二阶导数,发现他的二阶导数是恒大于0的,那么他的导数是单调的,且在某时刻为0,那么这时的x值就是极值处的x值,其实题目说了,有最小值,那么我们三分水过去就好了。 反思:精度不够,因为是log3的,所以的40次循环就WA,50次就可以A。//By BLADEVIL#include #include using namespace std;int task;double y;double f(double x) { return (6*x*x*x*x*x*x*x+8*x*x*x*x*x*x+7*x*x*x+5*x*x-y*x);}int main() { scan... 阅读全文
posted @ 2014-03-11 17:08 BLADEVIL 阅读(173) 评论(0) 推荐(0) 编辑

HDU 2199 二分

摘要: 我们可以发现这个函数是单增的,那么这样二分就好了。 反思:刚转C++,不会用scanf读入实数。(scanf("%lf",&y))//By BLADEVIL#include #include using namespace std;double f(double x) { return (8*x*x*x*x+7*x*x*x+2*x*x+3*x+6);}int task,y;int main() { scanf("%d",&task); double left=f(0),right=f(100); while (task--) { cin& 阅读全文
posted @ 2014-03-11 16:54 BLADEVIL 阅读(153) 评论(0) 推荐(0) 编辑

bzoj 1197 DP

摘要: 我们可以将这个问题转化为在n维空间中一共放m个n维球,求这m个球最多将这个空间分为不同的几个部分。 那么我们设w[i][j]代表i为空间放j个球分为的部分,那么w[i][j]=w[i][j-1]+w[i-1][j-1],我们考虑当前第j个球所产生的新的部分,在n维空间中,放一个n维球,这个球和其他n维球的相交的部分会降维变成n-1维,类似于3维空间球体相交部分为面,那么我们新加这个球最多可以和剩下的j-1个球都相交,且相交的部分为i-1维,那么这个问题就转化成了在i-1维中,j-1个球最多将这个空间分成多少部分,也就是w[i-1][j-1]。/**********************... 阅读全文
posted @ 2014-03-10 11:00 BLADEVIL 阅读(271) 评论(0) 推荐(0) 编辑

bzoj 2121 DP

摘要: 首先如果我们能处理出来i,j段能不能消掉,这样就可以直接dp转移了,设w[i]为前i为最少剩下多少,那么w[i]=w[j-1] (flag[j][i])。 现在我们来求flag[i][j],首先我们可以把字符串组建立trie然后处理在串L中从left位置开始的所有的flag,那么我们可以在trie上一直往下走,每到一个标记的点就将当前的flag[left][right]设为1,那么这样可以处理出连续可以消掉的字符串,然后就处理对于类似L为abcde,字符串组为ade,bc这样可以先消一个,然后再消的情况,这样我们可以发现,如果对于当前的left,right存在flag[i][right]... 阅读全文
posted @ 2014-03-10 09:35 BLADEVIL 阅读(248) 评论(0) 推荐(0) 编辑

bzoj 2258 splay

摘要: 类似于1014,用splay维护这个序列,维护每个节点为根的子树的hash值,对于一个询问二分答案判断就行了。 反思:询问的时候因为是原序列的x,y,所以开始的时候直接splay(x-1)了,后来发现这是不对的,因为可能在x前插入一些东西,所以需要麻烦些,先splay(x),然后提出来右端点为size[son[rot][0]]+1+len,然后再splay(find(size[son[rot][0]]+1))。/**************************************************************Problem: 2258User: BLADEVIL... 阅读全文
posted @ 2014-03-09 22:45 BLADEVIL 阅读(269) 评论(0) 推荐(0) 编辑

bzoj 1052 dfs

摘要: 首先可以二分答案,将最优性问题转化为判定性问题。 对于二分到的边长,我们可以把所有的点看成一个大的矩形,这个矩形为包括所有点的最小矩形,那么贪心的想,3个正方形,第一个肯定放在这个矩形其中的一角,然后去掉覆盖的点,然后再求出一个矩形,然后再枚举放在哪一角,去掉之后判断剩下的是否可以由一个正方形覆盖就行了。 反思:没画图,边界算的不对,而且枚举完两个正方形之后要判下是否没有没覆盖的点了。另外提供神样例 4 1 1 -1 -1 1 -1 -1 1答案是2。/**************************************************************Probl... 阅读全文
posted @ 2014-03-09 19:01 BLADEVIL 阅读(287) 评论(0) 推荐(0) 编辑

bzoj 1014 splay

摘要: 首先我们可以用splay来维护这个字符串,那么对于某两个位置的lcp,维护每个节点的子树的hash,然后二分判断就好了。/**************************************************************Problem: 1014User: BLADEVILLanguage: C++Result: AcceptedTime:4468 msMemory:3640 kb****************************************************************///By BLADEVIL#include #inclu.. 阅读全文
posted @ 2014-03-08 21:09 BLADEVIL 阅读(257) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 25 下一页