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

bzoj 3028 母函数

摘要: 首先我们可以求出来所有食物的母函数: 汉堡:f(x)=1/(1-x^2)。 可乐:f(x)=1+x. 鸡腿:f(x)=1+x+x^2. 蜜桃多:f(x)=x/(1-x^2). 鸡块:f(x)=1/(1-x^4). 包子:f(x)=1+x+x^2+x^3. 土豆片炒肉:f(x)=1+x. 面包:f(x)=1/(1-x^3). 然后我们可以将他们全乘起来,得到f(x)=x/(1-x)^4.然后根据泰勒展开1/(1-x)^n=1+C(n,1)x^1+C(n+1,2)x^2+C(n+2,3)x^3+...+C(n+k-1,k)x^k+...。 可以得到第n项的系数为c(n+2,... 阅读全文
posted @ 2014-03-29 17:20 BLADEVIL 阅读(442) 评论(0) 推荐(0) 编辑

bzoj 1856 组合

摘要: 这道题有些类似卡特兰数的其中一种证明,总方案数是c(n+m,n),点(m,n)对应y=x-1对称点为(n+1,m-1),所以答案为c(n+m,n)-c(n+m,n+1)。 反思:开始坐标轴画错了,结果得到的是c(n+m,n-1),然后就错了= =。 /**************************************************************Problem: 1856User: BLADEVILLanguage: C++Result: AcceptedTime:5220 msMemory:804 kb****************************... 阅读全文
posted @ 2014-03-29 15:18 BLADEVIL 阅读(441) 评论(0) 推荐(0) 编辑

bzoj 2809 左偏树\平衡树启发式合并

摘要: 首先我们对于一颗树,要选取最多的节点使得代价和不超过m,那么我们可以对于每一个节点维护一个平衡树,平衡树维护代价以及代价的和,那么我们可以在logn的时间内求出这个子树最多选取的节点数,然后对于一个节点的平衡树我们可以由他的子节点启发式合并而来,时间复杂度nlog^2n。 这道题还可以用左偏树来解决,左偏树为一种可合并堆,合并,删除,插入都在logn内完成,那么这道题的时间复杂度还可以nlogn。 反思:我写的是左偏树的,手残把value打成cost了= =,查了半天。 /*********************************************************... 阅读全文
posted @ 2014-03-29 13:09 BLADEVIL 阅读(361) 评论(0) 推荐(0) 编辑

【HMOI】小C的填数游戏 DP+线段树维护

摘要: 【题目描述】 一个长为n的序列,每个元素有一个a[i],b[i],a[i]为0||1,每个点和他相邻的两个点分别有两条边,权值为cost1[i],cost2[i],对于每个区间l,r,我们可以给每一个数一个c[i]值,c[i]=0||1,使得Σ(b[j]*(a[j]^c[j]))+cost1[j]*(c[j]^c[j+1])+cost2[j]*(c[j]^c[j+2]),j,j+1,j+2在[l,r]内时累加,现在有m次操作: M x:将x位置的a[i]^=1; Q l r:询问区间l,r的答案。 首先假设询问的只是一个区间,那么我们可以比较容易的用dp来求解w... 阅读全文
posted @ 2014-03-29 10:53 BLADEVIL 阅读(10553) 评论(0) 推荐(0) 编辑

【HNOI】 小A的树 tree-dp

摘要: 【题目描述】给定一颗树,每个点有各自的权值,任意选取两个点,要求算出这两个点路径上所有点的and,or,xor的期望值。 【数据范围】n#include #define maxn 100010#define LL long long#pragma comment(linker,"/STACK:102400000,102400000")using namespace std;LL n,l;LL pre[maxn<<1],other[maxn<<1],last[maxn],key[maxn],color[maxn],sum[maxn],size[maxn 阅读全文
posted @ 2014-03-26 18:17 BLADEVIL 阅读(262) 评论(0) 推荐(0) 编辑

bzoj 1483 链表启发式合并

摘要: 首先我们可以比较容易的在n的时间内算出来开始的答案,我们维护一些链表,分别表示不同的颜色,那么我们在计算答案的时候,只需要扫一遍所有的链表,判断链表相邻两项是否在序列中相邻,不相邻的话肯定在这其中的一个唯一有一个断的点,也就是分成了两个不同的颜色段,直接累加答案就好了。 然后我们对于每个询问,将颜色x换成颜色y,那么我们找到这两种颜色的链表,将小的链表连接到大的链表之后,同时统计由于合并两个链表而对答案造成的影响。这样直接合并是不行的,因为我们由于链表的长度而改变了合并的顺序,所以我们可以记录一个father[x],代表这个点的颜色,这样我们就可以合并了。 /*************... 阅读全文
posted @ 2014-03-26 15:31 BLADEVIL 阅读(374) 评论(0) 推荐(0) 编辑

bzoj 2733 平衡树启发式合并

摘要: 首先对于一个连通块中,询问我们可以直接用平衡树来求出排名,那么我们可以用并查集来维护各个块中的连通情况,对于合并两个平衡树,我们可以暴力的将size小的平衡树中的所有节点删掉,然后加入大的平衡树中,因为每个点只可能被删除插入logn次,所以时间复杂度为nlog^2n。 /**************************************************************Problem: 2733User: BLADEVILLanguage: C++Result: AcceptedTime:2112 msMemory:64868 kb****************... 阅读全文
posted @ 2014-03-26 15:15 BLADEVIL 阅读(1143) 评论(0) 推荐(0) 编辑

bzoj 2669 状压DP

摘要: 因为最多有8个'X',所以我们可以用w[i][s]来表示现在我们填了前i个数,填的X的为S,因为每次新加进来的数都不影响前面的最小值,所以我们可以随便添加,这样就有了剩下所有位置的方案,每次都这样转移。 但是这样会造成不是规定的地方出现局部最小值的情况,对于这样的情况,我们只需要枚举所有可能成为局部最小值的不合法状态来做容斥就可以了。 反思:这道题的容斥开始写错了,本来应该是判奇偶来判断正负,写成了全是负的,还是A了,应该是后面的容斥没有合法方案所以符号无所谓的关系,真是rp++。/************************************************ 阅读全文
posted @ 2014-03-26 13:48 BLADEVIL 阅读(348) 评论(0) 推荐(0) 编辑

bzoj 2165 DP

摘要: 首先如果不考虑数据范围的话,因为每一层都是等效的,所以我们可以用w[i][j][k]来表示在某一层的j位置,称作i次电梯到k位置,最多上升多少层,那么我们可以比较容易的写出转移,因为m十分大,i可能与m同阶,所以我们不能直接枚举i,这样我们考虑二进制的思想,w[2^p][j][k]表示用了2^p次电梯,最多上升的层数,那么这样我们可以直接由w[2^p-1][j][mid]和w[2^p-1][mid][k]转移过来,但是这样求出来的是我们最少用2^p次可以到达m层,最后的答案可能会比这个小,那么我们可以逐位的判断答案,是否可以通过减少某一位的1仍能达到m层,那样我们这个1就可以去掉,也就是不.. 阅读全文
posted @ 2014-03-26 13:29 BLADEVIL 阅读(297) 评论(0) 推荐(0) 编辑

【HNOI】 lct tree-dp

摘要: 【题目描述】给定2-3颗树,每个边的边权为1,解决以下独立的问题。 现在通过连接若干遍使得图为连通图,并且Σdis(x,y)最大,x,y只算一次。 每个点为黑点或者白点,现在需要删除一些边,使得图中的黑点度数为奇数,白点为偶数,要求删除的边最多。 【数据范围】 100% n#include #include #define maxn 100010#define LL long longusing namespace std;LL n,m,l;LL a[maxn],pre[maxnmax_a[aa]) aa=other[p]; if (max_b[other[p]... 阅读全文
posted @ 2014-03-26 10:46 BLADEVIL 阅读(289) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 25 下一页