自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 UVA 1633-Dyslexic Gollum(状态压缩DP)

题目大意:求长度为N(1用d[i][j][u]表示长度为i且后11个01串组成数j且不含长度大于或等于u的01串有多少个。如果j中含有长度至少为u的回文串,那么d[i][j][u]=0。否则,假设d[i][j][u]可以由d[i-1][v][u]转移得来。根据状态的表示,那么v的低10位肯定是u的高10位,v的最高一位可以为0或1,即v=j/2或v=j/2+(1程序将表打出

2015-02-28 13:23:02 1601

原创 UVA 1632-Alibaba(DP)

题目大意:在一条直线上有n(na[i]表示第i个宝藏的位置,b[i]表示消失的时间。首先注意到对于任意区间(i,j),拿完所有宝藏之后必然在i或j两者之一。所以用d[i][j][0]表示拿完第i个到第j个之间的所有宝藏,且最后位于i,用d[i][j][1]表示拿完第i个到第j个之间的所有宝藏且最后位于j。程序用滚动数组优化内存消耗,递推是按照区间的宽度递增的顺序,所以也是按照这

2015-02-28 00:48:16 2327

原创 UVA 1631-Locker(DP)

题目大意:给出两串长度为n(n首先假定,对于任意操作,把最后一个操作数当做操作的操作数。比如000一步变为111把操作数看成第3个数。预处理出数组cost,cost[i][j]表示在只有最后一个数字是操作数的情况下,从数字i变到数字j要的最少步数(i,j222->221-->220。用a[i]和b[i]表示源数字串和目标数字串的第i个数字。用d[i][j]表示前i个

2015-02-28 00:36:17 1602

原创 UVA 12166-Equilibrium Mobile(推导结论)

题目大意:给出一棵二叉树,整个树是天平,每个结点有一个砝码或一个天平,对于任意一个天平,绳子都在中点,每个砝码都有重量,求最少修改多少个砝码的重量使得整个天平平衡。本题的关键在于一个结论:若最终天平平衡,则在同一个深度的所有结点,无论它的祖先结点是什么,重量都应该相同。并且上一层的重量应该是下一层的2倍。证明其实是显然的。。之后只需要把所有的结点分块,然后取结点最多的块,其余的结点

2015-02-27 13:47:41 1446

原创 POJ 1297-Supermarket(DP)

题目大意:有M(1用d[i][j]表示当前买了列表的前i个物品并且走完了街道的前j个摊子的最小花费,那么分两种情况,如果第j个摊子卖的和在列表上第i个商品相同,那么可能从d[i-1][j-1]推来或d[i][j-1],即第j个摊子买或不买,若第j个摊子卖的不是列表上的第i个商品,那么就直接由d[i][j-1]推来。程序中用滚动数组从而在空间上压缩了一维状态。状态转移方程

2015-02-27 01:07:07 611

原创 UVA 10767-Barcelona’s trams(DP+数学推导)

题目大意:有一个列车,要走n个路段,每个路段有一定的长度。初始时,最大速度是M,每次在一个路段要开始的时候,司机可以选择一个速度,在(0,M]之间的任意值v。则发生冲突的概率是v/M,如果发生冲突,那么将会需要10秒恢复并且以恒定的速度5运行到这个路段完毕。并且如果发生冲突,M的值会少1(这样会对后面的路段有影响)。求运行完所有路段的最小花费时间。如果发生冲突,那么假设冲突在中点发生。还有些细节参

2015-02-26 15:33:04 769

原创 POJ 1440-Varacious Steve(DP)

题目大意:Steve和Digit轮流取甜甜圈,有n个,每次不能取超过m个(1用d[i][j][u][0]表示目前总共有i个甜甜圈,其中j个还未被取,u个在Steve处,且下一步到Steve走时,Steve能吃到的最多的甜甜圈,用d[i][j][u][1]表示目前总共有i个,j个未取,u个在Steve处,且下一步到Digit走时,Digit能吃到的最多的甜甜圈。状态转移方程:

2015-02-25 23:55:28 1319

原创 POJ 1189-钉子和小球(DP)

第i层有2*i+1种可能的位置(从第1个空位到最后一个空位总共i+1个和i个钉子位置),用d[i][j]表示第i行在第j个位置掉落的概率的分子(分母是2^i)。如果位置是空位,那么有3种情况:(1).从上一个同样的位置掉落下来,(2).掉落到左边的钉子(如果有)并向右走,(3).掉落到右边的钉子(如果有)并向左走。如果位置是有钉子的,有2种情况:(1).这个

2015-02-25 23:35:17 840

原创 POJ 1187-陨石的秘密(DP)

用d[i][j][u][v]表示i个{},j个[],u个(),深度为v的序列数,根据最后一个子括号(就是最后一个反括号对应的正括号范围内的括号)分类计数。最后一个子括号可能深度小于v,此时前面的括号深度必须为v,最后一个子括号深度也可能等于v,此时前面的括号深度可以小于或等于v。用sum[i][j][u][v]表示i个{},j个[],u个(),深度小于等于v的序列数。没递推完i,j

2015-02-25 23:28:09 998

原创 UVA 11252-Take Me Home (To the Place I Belong)(DP)

题目大意:有几种包裹需要打包,每种包括有一定的体积,每种包裹可能有多个。有一个运输公司提供了多种包裹服务,每种有一定的尺寸和价格,多加一种服务需要多付一定数量的钱。为了节省掉这一部分的钱,小的包裹可以使用大尺寸来运输,但大的不能用小的来运输,求最小价格。首先对服务排序,根据尺寸从大到小排序,如果有某些服务相对于某个其他的服务,尺寸小价格反而贵,则这种服务直接舍去。然后对包裹按尺寸从

2015-02-24 20:10:39 629

原创 UVA 10645-Menu(DP)

题目大意:Alfred要准备一些菜,每天一道菜,每个菜有收益和花费,如果连续两天准备同一道菜,收益减半,连续三天或更多,则不获得好感值,求在预算内的最多收益并输出每一天准备的菜。如果多个情况能获得相同的收益,输出花费较少的,如果还有多个,随意输出。用d[i][j][u][0]表示前i天,花费至少j,第i天为第u道菜且第i-1天不为第u道菜时,最大的收益,用d[i][j][u][1]

2015-02-24 19:47:12 586

原创 POJ 2229-Sumsets(DP)

题目大意:只用2的次方数(1,2,4,8…)组成N(1此题直接用完全背包会超时。用d[i]表示组成i有多少种方法,考虑组成中是否有1,有两种情况,至少有1个1,那么此时剩下的i-1随意组合,或者没有1,那么只能由2,4,8…组成,此时将它们除以2便得到1,2,4,8…,即组成i/2时的方案数。状态转移方程:d[i]=d[i-1]+d[i/2](i%2==0)d[i]

2015-02-24 19:43:01 420

原创 UVA 1513-Movie collection(树状数组)

题目大意:有n个电影碟,要看m次电影(1用数组模拟栈,只不过栈有些元素可能是空的,每次拿出后放在栈顶,并随时更新每个电影对应的在栈中的位置,求在它上面的电影数就是对数组求和。每次拿出把这个位置的值置为0,即减1,在栈顶放入就在栈顶加1,最终求和。#include#includeint a[100010];int b[35];int c[275000];int an

2015-02-24 19:37:13 431

原创 UVA 1314-Hidden Password(后缀数组)

题目大意:有一串长度为L(5首先将字符串在原字符串后拼接一次得到长度为2*L的字符串。用后缀数组计算各个后缀的长度为L的前缀就可以得出答案,计算完毕之后利用x数组可以求得起始点最小的。首先预处理出得到L的操作,起始数为1,操作包含两种:加1和乘2,对后缀数组的倍增模板修改使得它能完成加1的操作。#include#includechar s[200010]

2015-02-24 19:30:33 484

原创 UVA 536-Tree Recovery(二叉树恢复)

题目大意:给出二叉树的前序和中序遍历,输出后序遍历。递归处理,每次找到当前的根结点,然后递归左子树和右子树。#include#include#includechar a[30];char b[30];int c[370];void dfs(int i,int j,int u);int main(void){ int i,lo; while(scanf("

2015-02-24 19:25:10 480

原创 POJ 4052-Hrinity(KMP算法+AC自动机)

题目大意:给出一系列模式串,可能是以压缩形式给出的,并给出文本串,求问模式串总共出现了多少次,如果同一个模式串出现多次,只算一次,如果模式串A和B出现了,模式串B是A的子串,那么B不算。首先对字符串解压,然后对解压之后的模式串存入AC自动机中,接着算出哪些匹配,对于那些匹配的,我是KMP算法判断是否有子串的关系。#include#include#include#def

2015-02-24 18:46:04 437

原创 UVA 11488-Hyper Prefix Sets(trie树+DFS)

题目大意:给出若干个01串,定义P(S)为这个串的集合的某个公共前缀的长度乘有这个公共前缀的字符串个数,求最大的P(S)。用trie树存字符串,val[u]表示结点u有多少个字符串可称为公共前缀,最终dfs求出答案。#include#include#include#define MAXNODE 10000010#define SIZE 2int ch[MAXNOD

2015-02-24 18:37:48 483

原创 UVA 548-Tree(二叉树)

题目大意:给出二叉树的中序遍历和后序遍历,求一个叶子结点,它到根的距离最短,若有多个解叶子权值应该最小。递归遍历,每次找到当次递归的根然后递归左子树和右子树,后序遍历的最后一个结点就是根,在递归过程中记录根到当前结点的距离,这样可以在递归到达叶子时就能得到那个叶子结点到根的距离。这样可以不用恢复二叉树。#include#include#includeint a[100

2015-02-24 18:26:45 434

原创 POJ 1990-MooFest(树状数组)

题目大意:有N(1要求所有的声音和,那么每次对话只基于一头牛求就可以,可以基于听力值大的那头牛,首先对所有牛排序,根据听力值的大小。排序之后,每头牛只用求和在它前面的牛对话发出的声音,所有这样的声音加起来就是答案所求。用两个树状数组来完成这个操作。对于每头牛,关于它的和分两部分求,第一部分是位置小于它的,第二部分是位置大于它的。第一个树状数组来存每头牛的位置,第二个树状数组

2015-02-24 18:00:19 453

原创 UVA 10313-Pay the Price(DP)

题目大意:有300种货币面值分别为1到300,现在有3种询问方式,若只有一个数字N则输出组成N面值用任意数量的硬币的方法数量。若有两个数字N,L则输出组成N面值且用硬币的数量不大于L的方法数量,若有三个数字N,L1,L2则输出组成N面值且用硬币的数量在L1,L2之间的方法数量。用d[i][j]表示用i个硬币组成j元的方法数。从两方面考虑,如果至少选用一个面值为1的硬币,则由d[i-

2015-02-24 17:51:25 537

原创 UVA 10201-Adventures in Moving – Part4(DP)

题目大意:有一辆卡车每一公里耗油1升,油箱上限200升,初始时有100升油,现在中间有若干个加油站,每个加油站离初始点有一定的距离并且每个加油站都有自己的每升油价,可以选择一些加油,跑完全程以后车至少要剩100升油。问最小的花费。用d[i][j]表示到达第i个加油站并且加油(也许不加油)过后,到达j升油最小的花费。a[i].loc和a[i].pri表示加油站的坐标和价格。分两种情况

2015-02-24 17:41:27 393

原创 UVA 10581-Partitioning for fun and profit(DP)

题目大意:将整数m(1用d[i][j][u]表示将j划分成i个整数且开头的整数是u的序列有多少个。用sum[i][j][u]表示将j划分成i个整数且开头的整数不小于u的序列有多少个。先预处理出这两个表,之后的询问可以用这两个表解决。状态转移方程:d[i][j][u]=sum[i-1][j-u][u];sum[i][j][u]=sum { d[i][j][v]

2015-02-24 17:27:07 383

空空如也

空空如也

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

TA关注的人

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