- 博客(254)
- 收藏
- 关注
原创 数位DP专题
数位DP专题通过做题总结出两种方法1、根据相邻数位之间的关系递推Dp[i][j] 以j开头的i位数中所含答案的数量。可以通过递推先预处理好,然后再分情况统计。一般可以分两种情况统计:1、最高位不达到上限,每一位可以取任意值Ans+=dp[len][i] i = [ 0 , digit[len]-1 ]Tips:如果前导零会对答案造成影响,应该
2016-03-19 11:05:33 611
原创 Trie树专题
Trie树专题下面是查询字符串的模板,可以通过做题练习来灵活修改。1、静态建树 速度快,但可能会浪费内存 有的题用动态建树会超时,静态就不超时struct trie{ int next[maxnode][size];//小写字母size就是26,十进制就是10,二进制就是2 bool end[maxnode]; int sz; trie()
2016-02-20 23:36:27 429
原创 树状数组专题
树状数组专题 基础和原理就不多说了,做了一些树状数组的题,现在根据题目来大概分一下类。1、一维 单点修改 区间查询这是树状数组最基础的用法,query函数的判断条件如果习惯写成while(x)的请注意一下,如果x为负数的话,会造成死循环。要将数据偏移到1下标开始。void add(int x,int k){ while(x<=n) {
2016-02-16 11:33:40 841 3
原创 POJ 3133 Manhattan Wiring
题目链接:http://poj.org/problem?id=3133题意:给一个地图上有两个2,两个3,以及障碍格子和非障碍格子,现在要把两个2用线连接起来,两个3用线连接起来,求连接线之和的最小长度。思路:插头dp,格子分类:2/3格子 , 普通格子 , 障碍格子。2/3格子只能为单插头 , 普通格子为0插头或者2插头。其次是连通性,分2号线连通和3号线连通,即用4进制
2016-11-06 21:17:15 457
原创 POJ 1739 Tony's Tour
题目链接:http://poj.org/problem?id=1739题意:求从左下角走到右下角,每个非障碍格子只走一次的方案数。思路:求简单路径的数量,这个简单路径起点和终点固定,其次要把所有的非障碍格子都访问到。所以分为起点、终点、障碍格子和一般格子,一般格子有两个插头,且不能形成回路,即不能合并已经连通的插头。#include #include #in
2016-11-06 21:07:46 407
原创 HDU 3377 Plan
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3377题意:左上角出发走到右下角结束,每个格子有个分数。每个格子最多经过一次,可以不经过,求最大得分。思路:这题要求一个简单路径,也就是说只有起点和终点是单插头,其余点都是双插头, 所以分类讨论一下转移即可。#include #include #include
2016-11-06 20:59:24 347
原创 HDU 1964 Pipes
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1964题意:每个格子之间的墙壁有个花费,求用一个环经过每个格子仅一次的最小花费。求最小值花费。思路:一个简单的插头dp,相当于一个n*m的地图里找一个单回路覆盖全部点的最小花费,每个点记录向右走和向下走的花费。#include #include #include
2016-11-06 20:29:41 353
原创 FZU 1977 Pandora adventure
题目链接:http://acm.fzu.edu.cn/problem.php?pid=1977题意:地图上有三种点,不可走点,必须走的点,可走可不走的点。问有多少种单回路,可以经过所以的必须走的点。思路:插头dp,分三种类型格子讨论转移。由于回路的终点不固定,所以先记录最后一个可行格子的坐标,如果当前位置不小于最后一个可行格子,且合并相同连通性的格子形成单回路,我们就累加方
2016-11-06 18:56:10 433
原创 URAL 1519 Formula 1
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1519题意:对于给定地图,存在多少条不同的回路只经过所有的可行格子。思路:限制只能用一条回路,所以用最小表示法记录轮廓线。由于是单回路,所以合并相同连通性的插头,只能在最后一个合法格子处。每个可走格子一定有两个插头。#include #include #in
2016-11-06 18:43:13 284
原创 HDU 1693 Eat the Trees
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1693题意:给一个n*m的地图,1可走,0不可走。现在可以在地图上构建若干条回路,使得覆盖所有的1,不覆盖任何一个0,而且每个1只能被覆盖一次,求不同的方案。思路:比较简单的插头dp,0的格子无连通,1的格子一定有两个连通(在回路中)。分类转移即可。#include
2016-11-06 18:08:11 289
原创 BZOJ 2331 [SCOI2011]地板
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2331题意:给一个n*m的格子,有一些地方可以放置,有一些地方不可以放置,现在只用'L'型的地板铺满整个格子,L型地板的两端长度可以任意变化,但不能长度为0。铺设完成后,可以放置的地方都必须铺上地板,但同一个地方不能被铺多次,求不同的铺法。思路:插头dp从上到下,左到
2016-11-06 17:28:34 412
原创 UVA 11741 Ignore the Blocks
题目链接:http://vjudge.net/problem/UVA-11741题意:给一个n*m的棋盘,有k个坏格子,现在用1*2的骨牌覆盖全部的好格子,问有多少种方案。m思路:由于n很大 , k范围很小,我们按照坏格子所在的行分阶段,相邻的两个坏格子之间的好格子用矩阵快速幂去计算。可以维护每个状态的方案数,即一个数组(每行最多16个状态,0~15)。当前状态的行号是
2016-11-04 21:41:22 326
原创 HDU 4055 Number String
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4055题意:给一个长度为n的含( d , i , ? )字符串,表示一个1~n+1的排列,表示从第二个位置开始,每个位置和它的前一位的关系。d表示第i位小于i-1位 , i表示第i位大于i-1位 , ?表示第i位可以随意。思路:dp[i][j]表示前i个位置表示1~i的一个排
2016-10-27 12:06:32 230
原创 HDU 5768 Lucky7
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5768题意:给出n对(p,a),求区间[L,R]内为7的倍数,且不满足任意i∈n, x % pi = ai的个数。思路:容斥定理,设单独事件Ai为区间内为7的倍数且满足x % pi = ai的个数。那么区间内7的倍数的个数 - A1∪A2∪A3...∪Ai即为答案。然
2016-09-09 11:23:17 277
原创 POJ 1201 Intervals
题目链接:http://poj.org/problem?id=1201题意:构造一个集合,使得集合内的数字满足所给的n个条件,每个条件给出一个区间[L,R]和k,要求在此区间内至少存在k个数。所有的数都是非负数。思路:设Si为区间[0,i-1]内至少存在数的个数。对于区间[L,R],即Sr+1 - Sl >= k 转化为约束条件,同时对于任意[i,i+1]有0
2016-09-06 23:46:37 243
原创 UVA 515 King
题目链接:http://acm.hust.edu.cn/vjudge/problem/25023题意:有n个数(a1~an),有m个关系:给出区间[L,R]和k,∑ai k。然后判断是否存在这样一个序列。思路:差分约束模板题,需要把公式变一下型,构建n+1个点Si(0 k通过两边取反或+1的形式把关系不等式变形成Si-Sj#include #include
2016-09-06 16:24:44 270
原创 CodeForces 710D Two Arithmetic Progressions
题目链接:http://codeforces.com/problemset/problem/710/D题意:给两条直线,a1 * x + b1 和 a2 * x + b2,问存在多少Y∈[L,R],使得a1 * x + b1 = a2 * y + b2 = Y。而且x,y >= 0。思路:首先确定x和y的范围[L1,R1] , [L2,R2].根据 L 然后a1 * x
2016-09-04 21:50:13 591
原创 HDU 4111 Alice and Bob
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4111题意:有n堆石子,每堆有ai个,现在可以选择一堆拿走一个,或者合并两堆。问谁能赢。思路:如果全部的堆数都大于1,那么一定是把石子全部合并后一个个取走,因为输的人没法一次取走一堆,而赢的人每次把最少的合并起来。dp[i][j]表示有i堆为1的石子,j是
2016-08-30 17:22:20 400
原创 UVA 11404 Palindromic Subsequence
题目链接:http://acm.hust.edu.cn/vjudge/problem/28753题意:给一个字符串,删除其中0个或多个字符,使得剩下的字母形成一个最长的回文串,输出字典序最小的。思路:把字符串和它反向的字符串一起做一遍LCS。dp[i][j]表示从左边取i个字符,右边取j个字符的LCS。回文串有两种:奇数长度和偶数长度的,我们分别枚举这两种情况更新答案。
2016-08-29 23:42:13 405
原创 UVA 11552 Fewest Flops
题目链接:http://acm.hust.edu.cn/vjudge/problem/28550题意:将字符串每k个字符分为一组(长度为k的倍数),每组内字符可以任意重排,使得重排之后的字符串包含尽量少的块,每个块为连续的相同字母。思路:dp[i][j]表示前i个块,且第i个块以j字符结束时的最小块数。#include #include #include
2016-08-29 23:36:02 329
原创 UVALive 4794 Sharing Chocolate
题目链接:http://acm.hust.edu.cn/vjudge/problem/12055题意:一块长x宽y的巧克力,每次只能横向或者竖向沿直线切割,问能否将一块巧克力切割成给定的n个面积。思路:dp[x][s]表示还没有切出来的面积状态为s,剩余矩形的最短边为x时是否可行。保证一开始就满足s的面积和等于初始矩形,所以切的过程中也是相等的,只需要记录一个边即可。
2016-08-29 23:24:44 330
原创 UVALive 3983 Robotruck
题目链接:http://acm.hust.edu.cn/vjudge/problem/13674题意:有n个垃圾,给出每个的坐标和重量(xi,yi,wi),一个机器人的最大载重为C,求把所有垃圾按照顺序放进垃圾桶(0,0)走的最短距离。两点的距离为坐标差的绝对值之和。思路:dp[i]表示把前i个垃圾扔进垃圾桶走过的最短距离。枚举上一次扔进垃圾桶的垃圾j,那么[j+1,i]就
2016-08-29 23:05:45 385
原创 UVA 11825 Hackers' Crackdown
题目链接:http://acm.hust.edu.cn/vjudge/problem/18913题意:假设你是一个黑客,侵入了n台计算机,一共有n种服务,每台计算机都运行着所有的服务。对于每台计算机,你可以选择一项服务,终止这台计算机和它相邻计算机的该服务。求最多可以使得多少服务全部停止。思路:如果停止掉一个服务,也就是选择一个计算机集合,使得每台和它相邻的计算机能够构成全
2016-08-29 22:17:30 353
原创 UVA 10891 Game of Sum
题目链接:http://acm.hust.edu.cn/vjudge/problem/19461题意:一个长度为n的序列,两个人轮流取数。每次玩家可以从左端或者右端取任意数量个数,但不能两端都取。两人都希望自己的得分尽量大。当所有数都取完后,求先手取数之和减去后手取数之和。思路:dp[l][r]表示取区间[l,r]内的数时,先手之和减去后手之和的最大值。dp[l][r] =
2016-08-29 21:57:46 366
原创 UVA 10635 Prince and Princess
题目链接:http://acm.hust.edu.cn/vjudge/problem/19051题意:两个序列长度为p+1和q+1,且第一个数都为1,每个序列中的数各不相同,范围都在1~n^2内。求A和B的LCS。思路:由于序列中的数都是唯一的,所以把第一个序列按照1~p+1编号,然后把B序列对于编号后直接求LIS即可。#include #include #
2016-08-29 15:42:35 336
原创 UVALive 3882 And Then There Was One
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1883题意:n个数排成一个圈,第一次删除m,以后每k个数删除一次,求最后一个被删除的数。思路:首先处理n-1个人每k次删除一次的情况,倒退得到第二轮最后一个被
2016-08-29 15:36:20 524
原创 UVA 1371 Period
题目链接:http://acm.hust.edu.cn/vjudge/problem/41549题意:给两个串A,B。现在把B串分为若干个部分,对每一个部分进行操作将其变为一个A串,使得每部分操作次数的最大值最小。思路:二分答案最大值x,然后用x去dp检测是否可行。dp[i][j]为B的前i个字符,且B的第i个字符已经匹配到A串的第j个字符时的最小修改次数。若dp[
2016-08-29 15:31:44 512
原创 UVA 12222 Mountain Road
题目链接:http://acm.hust.edu.cn/vjudge/problem/42128题意:一条路两边都会有车来,但是一次只能走一个方向的,而且同向的车一起行驶的时候,路上的每个点经过车的时间至少相隔10s。给出车辆的信息,起始位置,最快经过道路时间和到达山路的时间,求出最后一辆车离开山路的最早时刻。某个车可以受前面的车影响而导致减速。思路:dp[A][B][k]
2016-08-29 14:41:03 574
原创 UVA 1379 Pitcher Rotation
题目链接:http://acm.hust.edu.cn/vjudge/problem/41556题意:有g+10场比赛,每天一场,每场都会对应一个对手。你有n个投手,每人一场比赛结束后都要休息四天,给出n个人对应m个对手的n*m胜率矩阵。求胜率的最大期望。思路:每个人5天可以一轮换,所以说对于某个对手来讲,就派胜率前五的投手去对战即可。dp[i][a][b][c][d]表示
2016-08-29 14:23:03 589
原创 UVA 10271 Chopsticks
题目链接:http://acm.hust.edu.cn/vjudge/problem/19452题意:将n只筷子分成k份,每份中除去最长的,剩下两个长度相减的平方作为一份的值,求k份筷子的值之和最小。思路:dp[i][j]表示前i只筷子分为j份和的最小值。我们将筷子从大到小排序。dp[i][j] = min( dp[i-2][j-1] + (a[i-1] - a[i])^2
2016-08-29 14:04:47 391
原创 UVA 12589 Learning Vector
题目链接:http://acm.hust.edu.cn/vjudge/problem/35247题意:有n个向量里面选k个,从(0,0)开始画,求与x轴围成的最大面积,输出面积的二倍。思路:优先画斜率大的,这样高度会尽量高,每当x增加的时候,面积也会增加的多一些。计算的时候直接算面积的二倍,一定是整数。dp[i][h]表示已经选了i个且当前高度为h时的最大面积。dp[i
2016-08-29 12:39:16 456
原创 UVA 1543 Telescope
题目链接:http://acm.hust.edu.cn/vjudge/problem/41494题意:一个圆上有n个点,选择其中的m个点按照顺序连成m边形,求最大的面积。思路:dp[i][j][k],表示从i号点开始作为起点的j个点中选择k个点连成图形的最大面积,且区间内的左右边界点必须选择。dp[i][j][k] = max( dp[i][l][k-1] + area
2016-08-29 12:27:35 428
原创 UVA 10163 Storage Keepers
题目链接:http://acm.hust.edu.cn/vjudge/problem/19445题意:有m个人可以雇佣看守n个仓库,每个仓库只能由一个人看守,但是一个人可以看守多个仓库,若一个人看守k和仓库,每个仓库的安全系数为ai/k。求招聘一些守卫,使得所有仓库的最小安全系数最大,然后其次守卫的能力总和最小。思路:背包两次,第一次先求前n个仓库的最小安全系数最大值。第二
2016-08-29 12:06:03 339
原创 UVA 12105 Bigger is Better
题目链接:http://acm.hust.edu.cn/vjudge/problem/42073题意:每个数字可以由若干个火柴摆成,现在用不超过n根火柴,求摆出来的能整除m的最大数。思路:dp[i][j]表示用不超过i根火柴摆出来的除m余j的最大数。对于一个已经求出来的dp[i][j],我们可以借助它来更新,枚举最后一位放的数字k,更新dp[i+num(k)][(j*10+
2016-08-29 11:48:39 355
原创 UVA 1336 Fixing the Great Wall
题目链接:http://acm.hust.edu.cn/vjudge/problem/36139题意:一条直线上有n个点需要修理,每个点有一个修理费用ci和单位时间增加的费用di,如果在时刻t去修理,那么此点的费用为t*di+ci。给出起始坐标,求修复完全部点的最小话费。思路:设f[i][j][k]为修复完区间[i,j]内的点且在当前区间的左端点(k=0)/右端点(k=1)
2016-08-29 11:39:06 573
原创 HDU 4352 XHXJ's LIS
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4352题意:求[L,R]范围内有多少数满足数位中最长上升子序列长度为m。思路:dp[i][j][k]表示还有i位没确定,前面的子序列状态为j时,要求的最长上升子序列长度为k时的个数。用一个10位的二进制参考nlogn求最长上升子序列的思想更新状态。如果出现数x,如
2016-08-22 10:44:02 296
原创 UVA 10934 Dropping water balloons
题目链接:http://acm.hust.edu.cn/vjudge/problem/27377题意:你现在有k个气球,你可以借助n层楼去测试气球的硬度,如果你从x层扔下气球,气球炸了,你会少一个气球,并且知道气球的硬度小于x;没炸的话你会知道气球的硬度至少为x。给出k和n,问至少测试几次才可以得到气球的硬度。思路:这题书上给了一个很好的思路,dp[i][j]表示测试j次,
2016-08-22 10:17:32 278
原创 HDU 5860 cjj's string game
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5863题意:用k个不同的字符,形成两个长度为n的字符串中,可以有多少种构建两个字符串的方法,使得所有的连续子串中,对应的两串相同的最大子串长度为过m。思路:建立转移矩阵,对于两串前i个字符,有两种情况:一种是前面连续相同最大子串长度没有达到过m,可以0~m-1任意一种
2016-08-22 10:04:01 375
原创 UVALive 7340 Sum of MSLCM
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=5362题意:求2~n每个数的因子和的和。思路:我们可以发现i加了n/i次。而且次数的个数很少,比如加1次的就有(n+1)/2个。所以我们就枚举次数,二分上下界
2016-08-21 20:00:15 487
原创 UVA 1630 Folding
题目链接:http://acm.hust.edu.cn/vjudge/problem/51191题意:给一个字符串,相同部分可以折叠,折叠可以嵌套。求最短长度的一种折叠方法。括号和数字的长度也要考虑进去。思路:对于一个字符串,有三种策略:1、不折叠。2、本身可以折叠。3、分为两个区间子问题。#include #include #include #inclu
2016-08-21 19:44:45 628
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人