自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ACM之梦

找一个不放弃的理由!

  • 博客(86)
  • 收藏
  • 关注

原创 福建省2014ACM省赛H Big castle (树形dp)

题意:给出一棵树,然后每个节点有一个状态0或者1,当操作某个节点时,相邻的节点会反转。求能否通过操作使整个树的节点全部变成1.题解:开始的想法是dp[u][2] 1表示这个节点是亮的,0表示这个节点是暗的。发现很多状态无法确定,然后多加一维的状态,dp[u][2][2],第二维表示这个节点是否操作过。这个转移的思想就是保证儿子节点全部暗或者全部亮,然后判断这个节点原来亮暗状态然后进行状

2015-03-17 21:07:39 806

原创 SGU 390 Tickets (数位dp,k进制树的合并)

题意:给出一个区间,将这个区间连续的数的数位加起来,保证和要不小于k,求能分的最多区间。题解:详细可以看算法合集之《浅谈数位类统计问题》,这题我们将数变成一个k进制的树,然后在树上考虑问题,对于这样的区间和,相当于树上子树的合并问题,因为合并会出现上个子树还有剩余的数位和,于是我们要合理利用这些数位和,dp[pos][sum][rem]表示数位pos,和为sum,前一棵子树还剩余rem

2015-03-16 21:18:29 1177

原创 codeforce 271D Good Substrings (后缀自动机+dp)

题意:给出一个串,和一个01串,01串只有26个字符,每个字符对应26个英文字母表示这个字符是否是好的,1表示好的,0表示不好的。所给的串中多少个不同子串至多包含k个坏字母。题解:这题没想到用dp来做,一直去想性质,其实用dp做挺简单的。dp[i][j]表示在后缀动机上的i点,现在有j个坏字母对应子串的个数。明显:dp[i][k]+=dp[next[i][j]][k] if(alp

2015-03-15 17:13:13 794

原创 codeforces 424E Colored Jenga (状态压缩,概率dp用hash记忆优化搜索)

题意:给出以最多6层的积木,每层可以由三个木块拼成,总共有三种颜色的木块,开始时给出了积木的排列情况,我们每次可以从积木中抽一块木块,抽木块的规则是投骰子,骰子分别投到red,blue,green,的概率为1/6,1/3,1/3.每次投骰子都要花费一分钟,如果投到的颜色不存在就等一分钟不操作。注意的是要保证不能从顶部抽,并且抽木块时不能让整个积木倒了,要保证不倒中间的木块必须存在,每次抽出的木

2015-03-11 15:07:21 1060

原创 hdu 5185 Equation (完全背包变形)

题意:给出n个数字,数字满足 x[i]题解:类似于完全背包,dp[i][j]以j为结尾重量为i的方案数。我们通过分析会发现对于某个重量i,数字能取到的最大值是(sqrt(8*i+1)-1)/2,根据前n项和变形而来。这样就把复杂度从O(n^2)变为O(nsqrt(n))。转移方程 dp[i][j]=dp[i-j][j-1]+dp[i-j][j] 对于这样的重量i,以j数字为结尾任然

2015-03-09 13:26:33 679

原创 poj 3581 Sequence (后缀数组好题)

题意:给出一个字符串,求这个字符串分成三段并且反转着三段得到字典序最小的序列。题目保证第一个字符最大。题解:题目保证第一个字符最大是非常有用的条件,我们可以用贪心,将字符串倒叙,找到字典序最小的后缀作为第一段,注意最小要字典序是在不会导致有一段是空串的前提下,例如 4 3 2 1 明显倒序后最小后缀时1 2 3,但是这样不可取,因为如果去1 2 3,那么其他两段就是空串了!这是求出了第

2015-03-08 13:13:13 603

原创 hdu 5164 Matching on Array (奇葩版ac自动机)

题意:给出一个a序列,m个b序列,a能通过倍数关系能出现多少b串。例如a{ 2 4 8 } b{ 1 2 } 那么a中的{ 2 4 } 和{ 4 8 } 是可以通过b序列通过倍数变成的。题解:我们可以把串进行缩放,然后缩放后的串进行匹配。对于m==1的情况用kmp 其他情况用ac自动机。搞一个分数类进行处理。自动机的边用map,对奇葩的地方就是这里,用map做边,map>next

2015-03-03 23:07:13 533

原创 hdu 3962 Microgene (ac自动机+矩阵优化(好题))

题意:给出n个串,现在要求长度为L的串至少包含着n个串中的两个串的个数。题解:一看这种计数类问题要么dp,要么矩阵乘法。dp明显内存时间都爆。那么可以考虑用矩阵乘法,首先如果直接用矩阵存不包含任意n个字符串,L次幂,将maze[0][i]相加得到长度为L的不包含任何n个串对应串的个数,然后在计算全部的情况,这样就缺包含一个字符串对应串的个数这个方案了,之前用枚举N个字符串哪个出现了进行

2015-03-03 19:38:38 607

原创 zoj 3535 Gao the String II (ac自动机+dp)

题意:给出A集合有m个穿,B集合有n个串,现在要求A集合中的串进行组合成长度不超过L的串S,是的包含最多B集合的串。题解:这题真心orz。dp[i][j][k]表示长度为i,在ac自动机上的状态j,并且是以k为结尾的A中的串。预处理出每个A集合中的串和其他A集合中的串拼接的长度,因为任何两个串拼接的长度可以有多个,所以暴力枚举拼接的长度然后判断是否可行。注意:空串可以拼接任何串在开

2015-03-03 16:13:48 729

原创 UVA 315 Network (割点)

计算割点的个数#include#include#include#include#include#include#include#include#includeusing namespace std;#define B(x) (1<<(x))typedef long long ll;void cmax(int& a,int b){ if(b>a)a=b; }void c

2015-03-31 21:46:02 637

原创 poj 1236 Network of Schools (强联通分量+缩点)

题意:给出多个学校的网络图,每个学校多有一个表,表中存这个学校能联通的学校编号(单向联通)。两个问题:1、至少要多少分资料才能全部传到所有学校;2、至少要连多少条边才能使得整个整个网络联通。题解:强联通,缩点完,根据缩点判断入度为0的点的个数ansA,出度为0的点的个数ansB。乱搞能发现两个问题的答案分别是ansA,max(ansA,ansB)#include#include

2015-03-31 20:12:43 474

原创 poj 2186 Popular Cows (强联通分量+缩点)

给出一些牛自己认为popular的牛,问那些牛是被所有牛认为popular的。裸的强联通分量+缩点。#include#include#include#include#include#include#include#include#includeusing namespace std;#define B(x) (1<<(x))typedef long long ll

2015-03-31 00:51:23 431

原创 hdu 2732 Leapin' Lizards (拆点,最大流)

题意:给出一个地图,地图里面有一些青蛙,每个位置有限定承受的次数,如果青蛙跳跃到某个位置,那么这个位置的承受力就减一,如果承受力是0就无法到达这个位置。现在问最少有多少青蛙无法跳出地图。题解:将有承受力的点拆点,然后网络流。TL中。。#include#include#include#include#include#include#include#include

2015-03-30 19:58:03 456

原创 hihoCoder 1076 与链 (数位dp)

题意:给定 n 和 k。计算有多少长度为 k 的数组 a1, a2, ..., ak,(0≤ai) 满足:a1 + a2 + ... + ak = n。对于任意的 i = 0, ..., k - 1 有 ai AND ai + 1 = ai + 1。其中AND是与操作.题解:分析ai&ai+1=ai+1这个操作,我们会发现,ai+1必须比ai小或者等于ai才能满足,并且将其化成二进

2015-03-30 13:42:57 1157

原创 hihoCoder 1075 开锁魔法III (dp,划分阶段)

题意:一日,崔克茜来到小马镇表演魔法。其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅有一把钥匙能打开它。初始时,崔克茜将会随机地选择 k 个盒子用魔法将它们打开。崔克茜想知道最后所有盒子都被打开的概率,你能帮助她回答这个问题吗?题解:我们发现对于打开盒子会形成环,当打开一个盒子时会得到某个盒子的钥匙,不断打开最后回到起始盒子,这样就可

2015-03-30 00:18:48 566

原创 hdu 4289 Control (最小割)

题意:给出一个图,盗贼在s点,警察在t点,给出在每个点设置捕获点需要的花费,现在问在让盗贼无法通过需要的最少花费。题解:最小割定理,拆点后,把点权变为边权,然后跑一边最大流,结果就是最小割的值。#include#include#include#include#include#include#include#include#include#include#defi

2015-03-29 16:18:13 389

原创 hdu 5194 DZY Loves Balls (dp)

题意:给出n个黑球m个红球,随机抽取球,然后根据抽取的球得到一个序列,黑球表示1,红球表示0.问这样的序列01现的次数和出现01串的串的个数比是剁手。题解:这道题,开始用状态位枚举,华丽的挂了。dfs可过。dp速度快!dp[i][j][k][l]表示取了i个黑球j个红球01出现次数为k,以l为结尾对应串的个数。最后01在所有串出现的次数通过枚举k计算。出现01串的串的个数是C[n+

2015-03-29 00:28:10 427

原创 poj 2195 Going Home (费用流)

水题,直接搞。#include#include#include#include#include#include#include#include#include#include#define B(x) (1<<(x))using namespace std;void cmax(int& a,int b){ if(b>a)a=b; }void cmin(int& a,in

2015-03-27 01:51:58 398

原创 poj 3281 Dining (最大流)

题意:给出N个牛,D个食物,和F杯饮料。然后给出每头牛喜欢吃的食物和饮料的编号,但是没个食物和每一杯饮料只能供一头牛享用,问最多有多少头牛可以同时吃到食物和喝到饮料。题解:开始我的想法超级源点连饮料和食物,然后对应的饮料食物连上能吃它的牛,然后牛连超级汇点。结果wa。真确做法是源点连食物,食物连牛,牛连饮料,饮料连汇点,牛拆点成两个点。#include#include#incl

2015-03-26 21:22:04 519

原创 kuangbinOJ 1216 Gambler (ac自动机+概率dp)

题意:两个人分别拥有两个串P,Q,现在两个人玩掷硬币游戏,从一个空串开始,如果正面向上那么就在串后面+'1'否者+'0'。一旦这串中包含了P或者Q串就停止比赛,如果包含P则A赢,包含Q则B赢,否则平局。现在问A和B赢的概率分别是多少。题解:这题要分别对A赢和B赢进行dp,应为有平局的情况。那对于A赢dp,将P插入自动机标记为1,插入自动机标记-1,这样在建机时就将包含P和不包含Q的分开

2015-03-26 17:33:52 897

原创 poj 3436 ACM Computer Factory (最大流)

题目真心没读懂,参考这位仁兄通过拆点建图,然后跑一边最大流,枚举每条边找出有流量减少的边,那么这条边肯定是最大流上的边输出即可。#include#include#include#include#include#include#include#include#include#include#define B(x) (1<<(x))using namespace std;

2015-03-26 00:55:08 432

原创 ISAP算法

struct EDGE{ int v,next,c,f;}E[maxn<<1];int head[maxn],tol;int gap[maxn],dep[maxn],pre[maxn],cur[maxn];void Init(){ memset(head,-1,sizeof head); tol=0;}void add_edge(int u,int v,in

2015-03-25 22:55:01 602

原创 HUST 1214 Cubic-free numbers II (容斥原理)

题意:给出一个范围,求这个范围中满足n=x^3*k的数的个数。题解:枚举小于n的素数,然后乱搞(容斥),TL。。。#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define B(x) (1<<(x))vo

2015-03-25 19:19:57 497

原创 URAL 1114 Boxes (dp)

暴力dp,dp[i][j][k],表示到底i个盒子为止,用了j个红球,k个蓝球的方案数。坑点:会爆longlong,用unsigned longlong即可。#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define

2015-03-25 12:56:17 531

原创 URAL1091 Tmutarakan Exams (容斥原理)

题意:求S以内包括S,最大公约数大于1的K个不同的数有多少种情况。题解:我们知道要使得k个不同的数有公约数>1,那么这些数肯定有公共的约数n>1,为了不重复计算,我们枚举这个质数约数,得到倍数的个数n,那么这个约数能得到的K个不同数的组合方案有C[n][K],但是会出现这样的情况比如:假设现在S=12,K=1,那么2 ,4, 6,8 10,12; 3 6, 9, 12;2和3对应的组合

2015-03-25 11:28:48 516

原创 URAL 1036 Lucky Tickets (高精度,数位dp)

题意:求2*N位的数,前N位数和等于后N位数和并且这个和等于S对应的数的个数。题解:高精度存dp,dp[i][j]表示前i位和为j的个数,状态转移很容易。注意和为奇数时无解所以结果是0.#include#include#include#include#include#include#include#include#includeusing namespace st

2015-03-25 01:43:39 735

原创 hdu 3208 Integer’s Power (坑精度,容斥)

题意:给出一个范围,求这个范围每个数power的和,power的定理例如:64=2^6,99=99^1,16=2^4,要尽量让指数最大,那么对应的指数就是power。题解:枚举指数,计算,然后去重。精度fuck!#include#include#include#include#include#include#include#include#include#incl

2015-03-24 23:04:37 836

原创 poj 1091 跳蚤 (数论,容斥原理)

题意:一只小跳蚤想要迟到它左边的食物,但是跳蚤只能按照某张牌上的数字进行往左或者往右的跳跃。牌中数字有N+1个,并且最后一个一定是M,其他的不比M大。问在所有的组合M^N中有多少张牌是可以让跳蚤迟到食物的。注意,牌上的数字可以重复使用。题解:这种题目下手要寻找一个规律,规律就是突破口,我们要得到那些性质的数组成的牌能让跳蚤迟到食物。发现这些数如果公约数为1那么跳蚤就可以吃到食物,那么我

2015-03-24 15:29:50 1346

原创 FZU 2188 过河I (dp)

题意:题目意思很简单,就是一开始有x只羊和y只狼,接着他们要过河,过河的规则是:船有一个容量只能装n个动物,每次过河都至少有一个动物在船上,并且不管是在岸上还是船上都必须保证狼的数量小于等于羊的数量。现在问你让所有动物过河的最少操作数。题解:这题用dp解,dp[i][j][2]表示左边有i个狼,j个样并且现在人在左边0,右边1的操作数。右边的羊和狼用总数减掉就出来了。发现状态转移很难搞

2015-03-23 23:47:10 625

原创 hdu 4135 Co-prime (容斥原理)

求一个区间和N互质的数的个数。容斥原理,用set存N的质因数。#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define B(x) (1<<(x))void cmax(int& a,int b){ if(b>a)a=

2015-03-23 17:35:15 514

原创 hdu 2841 Visible Trees (容斥原理)

给出一个矩阵问在点(0,0)的人最多能看得到多少点。发现规律:对于这些点的坐标,只要坐标互质就可以看到。那么就转化为求区间(1,n)和(1,m)是互质的数对的对数。容斥原理。#include#include#include#include#include#include#include#include#include#includeusing namespace std

2015-03-23 16:33:48 481

原创 hdu 4407 Sum (容斥原理)

题意:对于一个序列原来是1~n,现在又两个操作,操作1、给定区间[l,r]求这个区间中与p互质的数的个数;操作2、将区间的第i个数变成a。题解:如果没有替换的操作,对于求某个区间与p互质的个数,可以分别求[1,l]和[1,r]的,然后相减。对于求某个区间的数是否与p互质,明显不好求,那么我们可以求不互质的个数,不互质的个数就是p的质因子倍数的个数,这个显然要用容斥来计算,在计算时我们要

2015-03-23 00:17:21 593

原创 hdu 2204 Eddy's爱好 (数论,容斥原理)

题意:给出一个范围(1,N)问存在多少这样的数M^K(k>1)题解:我这样分析:1、对于某个M^K,我们不妨将K分解,假设分解成为a,b,那么M^(a*b),那么会发现一重复的问题,就是(M^a)^b和(M^b)^a是重复计算了,那么要使得不重复计算K一定不能分解,那么K必须为素数。2、现在分析某个M^K,对于这样的K有多少个M能够满足,满足的个数为:N^(1/K),好啦,分析

2015-03-22 21:01:43 839

原创 hdu 1695 GCD (数论,容斥)

题意:给出两个区间,求这个两个区间这样的一对数:(a,b) gcd(a,b)=k 的个数,(a,b)和(b,a)等价。题解:要求区间(1,l)(1,r)一对数满足最大公倍数等于k,那么等价于求(1,l/k)(1,r/k)一对数满足互质。继续分析发现可以将问题分成两个部分解决:我们假设l比r更小1、(1,l)和(1,l)这个区间的某个数i,其中一部分解就是这些i对应在(1,i)区间互

2015-03-22 17:34:54 574

原创 FZU 2186 小明的迷宫 (TSP)

题意给出一个迷宫,然后拿到所有宝藏然后回到原点,求最短时间。#include#include#include#include#include#include#include#include#includeusing namespace std;#define B(x) (1<<(x))typedef long long ll;void cmax(int& a,int b

2015-03-22 16:51:30 1264 1

原创 kuangbinOJ G I Wanna Be A Palindrome (贪心)

题意:给出一个串,问能否通过删除一个字符使得整个串变成回文,这个字符要尽量靠前。题解:贪心,很容得到。我们这样想,分别设两个指针l=1,r=len;然后不断判断s[l]和s[r]是否相等,相等就缩进,知道某个位置不相等,那么删除的位置肯定是这两个位置中一个,那么就分两种情况删,假设我们删的是l,那么只要判断剩下的串l+1~r是否是回文就可以了。这样做还是不够的,因为会有这样的数据aab

2015-03-21 23:35:43 607

原创 kuangbinOJ B Lucky Sequence (hash大发)

题意:给出一个序列,问子序列是k的倍数的个数。题解:用hash存0-n的前缀和,然后根据这个式子 (sum[j]-sum[i])%k=0 变形 (sum[j]%k+k)%k=(sum[i]%k+k)%k ,这样做为了保证负数也通过。然后只要查找是否目前hash中能找到多少个(sum[j]%k+k)%k。#include#include#include#include#inc

2015-03-21 23:30:15 543

原创 kuangbinOJ 1217 Operations on Grids (暴搜)

题意:给出一个矩阵,是右一个9位数的每位构成的,现在问通过一些四种操作能得到多少种不同的方案。操作分别为向做转,向右转,上下翻转,左右翻转。题解:暴力搜索,对每个排列的状态存入set。答案就是set.size(),比赛的时候一直wa,姿势不对。#include#include#include#include#include#include#include#includ

2015-03-21 23:23:44 494

原创 hdu 5191 Building Blocks (汗!)

题意:给出n堆方块,现在要通过移动方块得到连续W高度H的方块,每次移动一个方块。求最少操作数。题解:其实这题可以枚举长度为W的区间在那个位置,对于W长的区间要操作的最少数量是max(s1,s2),s1表示全部需要补入的堆要补入的方块数,s2表示全部要补出的堆要补出的方块数,取最大值通过常理去判断下是可以得出的。接下来就是不断枚举W区间和得到最小的max(s1,s2),但是要在开头和结尾

2015-03-21 22:52:57 511

原创 FZU 2172 巡了南山我巡北山 (dp)

题意:有两个字符串A和B,每一次可以选择以下操作中的一种,只对字符串A进行操作,用最少的操作使得字符串A与字符串B相等:在字符串A中插入一个字符;在字符串A中删除一个字符;将字符串A复制,得到字符串A的一个拷贝C,将字符串C接在字符串A后面。题解:dp[i][j]表示处理到字符串A的第i个点,字符串B的第j个点时的最小操作。这题的难点在于如果处理第三个操作。要对dp

2015-03-21 01:53:08 1442

空空如也

空空如也

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

TA关注的人

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