自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 UVA 11922(用splay实现可分裂和合并的序列)

介绍一下,splay保存的序列,序列不再是有序的,只是维持相对位置,splay主要实现对第k个位置的元素旋转到根,然后实现分裂与合并,要实现找到第k个元素,就必须维护一个s(以该节点为根的子树有多少节点)。对于本题目而言,要实现翻转,可以类比线段树来加惰性标志,实现翻转。#include #include #include #define rep1(i,x,y) for(int i=

2015-09-30 20:28:32 521

原创 codeforces round#322 div2 F (树形背包)

题目意思:给定一颗n(n分析:直接树形背包,找一个不是叶子的节点当根节点。d[ i ] [ j  ][ k ] 代表当前在i节点,i节点分配给了k,要完成i所在子树内叶子节点分给A j个所产生的最小相邻边数。树形背包要注意的时在背包时,先前状态总是当前只考虑前面几个子树时所产生的最小值#include#include#include#include#includ

2015-09-29 12:52:08 393

原创 51nod 算法马拉松6(索函数)(规律题目)

总的来说是要先找规律的题目,然后就是一个球log2(f[ n ])的技巧。这题目的解题报告说的很详细:通过列出前几项观察可以发现,答案其实是2^k-1,其中k为fib[n]在二进制表示中的位数,记为bit(f[n])。下面来证明该结论。用数学归纳法。对于m=0,1时该结论显然成立。设当m时成立。当m=n时,由于f[n]=f[n-1]+f[n-2]那么这个时候bit[

2015-09-28 17:21:59 640

原创 HDU 5482(思路题目)

对于一个串来说我们粗略的看,它有多少个子串只和它各个位置的相等关系有关,所以我们没必要在乎字符集有多大,只需要枚举n的所有划分,处理出cnt[i][j][k]cnt[i][j][k]cnt[i][j][k]表示长度为iii的串有jjj个不同的字符且有kkk个子串的方案,每一次枚举的时候要么后面加一个已经出现过的字符,要么加一个新的字符。这样搜索状态总数只有BellnBell_nBell​n​​个,

2015-09-27 10:15:24 488

原创 HDU 4913 (思路题目)

题目意思是给定序列长度同为n的数列a,b; 要求出所有的子集元素的 2 ^ (max(a) ) * 3 ^ (max(b))的和。分析:首先对只有一个数组a,我们的通常思路是先排序 , 递推算法求解。 ans[ i ]  = ans[ i-1 ] + 2^(i-1) * 2^a[ i ];那么多了一个b数组,可以先按b排序 。记走到 i , 前面 a的值比ai小的有x个,

2015-09-25 14:22:29 715

原创 codeforces round# 296 (div1 D)(bitmasks)

本题目用bitset很容易搞定,也可用fft可惜不会:首先,统计出每个位置是否可以匹配特定字母,那么对于0 - n-1这些位置,只有当以位置为首位,且可以匹配模板串首位时,才有可能匹配,必须能在该位置的下一位匹配到模板串的第二位。用bitset即可实现。//#pragma comment(linker, "/STACK:1024000000,1024000000")#include #

2015-09-23 11:59:14 385

原创 codeforces round# 303(div2 E)(思路图)

求图从s出发的最短路径树的边权总和最小。在跑dijkstra时候,保证每个点的父边权值尽量小就可以了。//#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #include #include #include #includ

2015-09-22 12:42:33 281

原创 codeforces round# 302 (div1 D 树形计数)

首先这个题目要求的是对于给定的一刻树,求每个点到其他所有点每条路径上至多有一条不好的边,求问每个点的所有方案。分析:先求出1到所有点的可行性方案,那么其他点的值,可由该点递推出来。考虑 fa[u] 代表u的父节点只不经过u的所有方案书, 那么ans[ u ] = d[ u ]*fa[u];(d[u] 代表以1为根的树只考虑从u往下走可行方案数)//#pragma comment(l

2015-09-21 13:44:50 361

原创 HDU 5456(数位dp)

题意:给定n(n0 && b>0 && c >0);分析:典型的数位dp要表示减法关系,我们可以从低位到高位枚举a,b,c的当前位置是谁,走到当前位,状态的一个维度就是剩余多少火柴,和前一位需不需要借位。那么走到当前还需要控制a,b,c是不是已经走到了它的最后一位,一个3位二进制数描述,若一个数已经结束,那么当前位置只能填充0且不需要使用火柴。//#

2015-09-19 20:21:03 1433

原创 BZOJ 3994 (思路最大流)

因为用时可以二分,所以先二分最小值,那么判断用最大流就可以了。好像不用解释什么,对于源点对每个装备连一条边,边权为时间*装备杀伤力,经过可行性矩阵 ,流向n个机器人,每个机器人向汇点流自己的防御值。那么如果最大流等于所有机器人防御值之和,那么最大流方案,既是该时间下的可行性方案。//#pragma comment(linker, "/STACK:1024000000,102400000

2015-09-18 15:30:13 284

原创 BZOJ 3991(dfs序 + LCA 公式推导)

题意:给定一颗带权的树(n分析:到达所有点并返回,是这些点用最少的边连起来的权值的2倍。这样只需动态计算,最少边的和。这里以1为根节点,跑一遍dfs序。考虑插入:那么如果插入点得dfs序,在集合中存在点dfs序的中间,找到比之小的最大点,和比之大的最小点,因为插入点在内部这两点连线与该点得距离最小。否则,插入点在外部,找dfs序最大和最小点,即可。删除是插入的逆操作。

2015-09-18 14:28:59 787

原创 BZOJ 3990(深搜思路题目)

题目: 小A有一个1-2^N的排列A[1..2^N],他希望将A数组从小到大排序,小A可以执行的操作有N种,每种操作最多可以执行一次,对于所有的i(1  下面是一个操作事例:  N=3,A[1..8]=[3,6,1,2,7,8,5,4].  第一次操作,执行第3种操作,交换A[1..4]和A[5..8],交换后的A[1..8]为[7,8,5,4,3,6,1,2].  第二次

2015-09-18 11:29:50 311

原创 codeforces round# 320 div1(C 思路三分)

本题目的意思是给定一个数列,有真正有负,让找一个值x使得数列 a[1] - x, a[2]-x, ....a[n]-x 的连续区间和绝对值的最大值最小。首先x选a1 - > an的最大值max_,那么最大负数值为sum1->n, 最大正数为0 ,选最小值反之。所以一条负数绝对值最大值的线与负数绝对值最大值的线在x取值为min_ -> max_ 范围内交叉,那么答案的线条就是一个V型,用

2015-09-17 12:57:19 387

原创 UVA 1665(并查集题目)

本题目的意思是给定一个n*m的数阵(n,m思路:给所有格子按权排序,从大到小处理这T个数,每次只需把满足条件的格子加入并查集,并在合并过程中动态统计联通分量的个数。//#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #inc

2015-09-17 11:00:50 890

原创 UVA 1664(思路题目)

给定一颗树,边上有权值,让求从一点出发到其他所有点路径上最小权之和尽量打,输出最大值。思路: 考虑每个最小边权的边若获得了两边联通分量的最大值,那么该树的最大值也就递推了出来,这样直接递归求最大值,由于正向写系数较大,可以考虑倒过来,权值从大到小,然后用并查集合并即可。//#pragma comment(linker, "/STACK:1024000000,1024000000")#

2015-09-17 10:21:13 573

原创 codeforces round# 302 (div1 C) (状压dp)

本题目的意思是给定n(n求用最小的代价让所有的字符串,都存在一个位置,在同列中没有和它相同的字符。考虑d[ s ]代表状态s下(其中1代表该位置已经唯一,0反之)还需的最小代价,转移只有两种,找到最小的没被唯一化得位置p, 枚举修改位置j, 可以 (1)修改j本身   或者  ( 2 )  将j列里所有与该位置第j列有相同字符的修改费用加起来减去一个最大值。因为左右的可行性转移只有

2015-09-15 12:51:28 295

原创 codeforces round# 302(div 2 D)(思路)

本题目要让删除尽量多的边,使得图上存在一条从s1 -> t1 不超过 l1 的路径,和一条从s2 -> t2 不超过 l2 的路径。因为点数不超过3000,边数也不超过3000,且边权都为1那么直接bfs求出任意两点的最短路径。然后直接枚举重叠部分的两个点,重叠的起点和重叠终点然后暴力就可以了。//#pragma comment(linker, "/STACK:1024000000,1

2015-09-15 09:33:56 321

原创 codeforces 319 div1 D(Matrices)

本题目的意思是给定了一个有向图,n个点,m条变,n解析:用一个矩阵A(1,n) 代表当前该人走了固定步数可以到达的点,0代表不可以到达,1反之。用一个B(n,n)代表当前的转移矩阵,即那些边是可以走的,那么把所有边按照d排序,那么在下一条边可以走之前,必须先由现在可达的状态至少再走差值步数,如果走了小于等于差值步数到达了n,那么只需在原来没走差值步的基础上枚举走几步可到达即可。为了

2015-09-14 11:12:59 3301

原创 UVA - 1658(网络流经典拆点方法)

把每个点(除了1,n)之外拆成i和i1,两点间连一条容量为1,费用为零的边,这样可以限定,每个点只被跑到一次,那么之后跑一个最流量为2的最小费用流就可以了。至于其他边,流量设为1,保证每个边只被跑到一次。//#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #inc

2015-09-10 21:36:10 1267

原创 UVA 753(最大流匹配)

s - >往M个设备流1, 然后每个设备往对应插口号流1,然后插口号之间的K个转换边流无穷大(代表该装备能被利用无穷遍),然后插排号流1到对应的N个插排,然后每个插排流1到汇点。//#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #

2015-09-10 19:39:25 422

原创 UVA - 11082(最大流思路题目)

给定一个R,C矩阵。先计算出每行的和xi , 和每一列的和yi那么增加一个源点S和一个汇点T;对所有的S->xi ,建立边,边权为xi - C;(减去C的原因是为了让每条边的 xi - >yi 的边流量为 0 - 19)对所有的yi->T ,建立边,边权为yi - R;  对所有的xi->yi ,建立边,边权为19;然后跑一边最大流就可以了。特别说明的是初始化类时,

2015-09-10 11:32:07 353

原创 HDU 2242(概率dp 分情况统计)

本题目的意思:给定M(M分析:首先对每只队伍,求出 至少AC一题,但AC题数比N小的概率p1,和AC至少N题的概率p;这样就可以用简单背包解决该问题,定义d[ i ][ j ] 代表前面i-1个已经决策,当前存不存在已经AC大于等于N的队伍(j=1 代表有,j = 0 代表没有)那么d[ i ][ j ] =  d[ i+1 ][ 1 ] * p2[ i ] + d[ i+

2015-09-08 09:28:22 304

原创 HDU - 3853(简单概率dp , 注意边界)

本题目直接按题目意思推方程转移就行了,但是有个坑点,就是对于一个点i,j从1,1开始不可达,那么该点的p1(转移到自己)就有可能为1,所以当转移到一个点的概率为0的时候那么就不往该点转移。//#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #inc

2015-09-08 08:25:15 440

原创 HDU - 4035(概率dp 用待定系数法解决递推依赖)

本题目的状态转移表达式是很好写的,但一个节点不仅依赖子节点,还会依赖父亲节点和1好节点的期望值。假定 p = (1-ei-ki)/m ,(其中m为i节点的子节点和父亲节点总个数的和)Ei = ki * E1 + ei*0 + p*( Ef + 1) + p* ∑(Ej + 1) ( 其中j为i的某一个子节点,f为i的父亲节点)   .......................

2015-09-07 21:50:03 335

转载 HDU 4089

谢谢http://blog.csdn.net/acm_cxlove/article/details/7854526       by---cxlove题目:仙5的激活序列。有以下4种情况:1、注册失败,但是不影响队列顺序 ,概率为p12、连接失败,队首的人排到队尾,概率为p23、注册成功,队首离开队列,概率为p34、服务器崩溃,激活停止,概率为p4求主角的位置在K以内,

2015-09-07 13:40:04 277

原创 zoj 3329(经典概率dp)

不写了,转别人的题解,但是还没有想明白这样做的道理。题意: 有三个骰子,分别有k1,k2,k3个面。 每次掷骰子,如果三个面分别为a,b,c则分数置0,否则加上三个骰子的分数之和。 当分数大于n时结束。求游戏的期望步数。初始分数为0  分析: 假设dp[i]表示拥有分数i到游戏结束的期望步数 则  (1):dp[i]=SUM(p[k]*dp[i+k])+p[

2015-09-06 17:10:05 314

原创 UVA 6624(简单概率dp)

本题目的意思很简单,但读了N久,才明白...一个序列由 2 - 10 , J , Q , K , A ,构成 (其中 J , Q , K 代表10, A代表 11)现在选定m为第一次第一个被选择的位置,那么它每次往后走都是走到 p + num [p ] , p代表当前位置, num[ p ]代表当前位置的数字。那么走到一个位置若下一个位置不存在,就停止。那么n就是从m开始一共走了n个位

2015-09-01 21:07:40 364

原创 UVA 6625(状态压缩dp)

这个题目的意思是给定k,n( k,n并给定k行每行有几个连续的空格,所有的行左对齐,每一行最多7个,下面的行的空格数给定一个填数字的规则,当对于任意位置i,j ,  num[ i ][ j ] > num[ i-1 ][ j ] && num[ i ][ j ] >= num[ i ][ j-1 ] 问有(只用数字1->n)有多少种填满空格的方案。解:对于直接定义前每一行被填成

2015-09-01 17:07:27 424

原创 HDU 5117(简单背包dp)

本题目的意思,就是有n个灯泡,和m个开关,每个开关控制着一些灯的明亮,求所有在2^m种选择下,所有明着的灯三次方总和,定义xi 为第i盏灯的明亮情况0代表不明,1,代表名X^3 = (x1 + x2 + x3 .. xn)*(x1 + x2 + x3 .. xn)*(x1 + x2 + x3 .. xn) 所以可以分开求在三盏灯为i,j,k 时所有情况个数,也就是这三盏灯对答案的贡献。

2015-09-01 09:14:12 496 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除