DP
文章平均质量分 80
Tri_integral
这个作者很懒,什么都没留下…
展开
-
UVAlive 5863 Probability Computation 题解
题目题意:一个n位的二进制数x,已知每一位为1或0的概率,求x mod q==r的概率。题解:以dp[i][j]表示i位及i位之前的数模q为j的概率,那么转移时向加0和加2^i转移,最后dp[n][r]为答案。 //Time:9ms//Memoty:0KB//Length:1019B#include #include #include #include原创 2013-07-21 22:37:40 · 1008 阅读 · 0 评论 -
HDU 4597 Play Game 解题报告
通化邀请赛题意:给两叠数量相同的牌,两人轮流取,只能从顶部或者底部取牌,每次只能取一张,每张牌上有分数,问先手最多能得几分。解法:记忆化搜。dp[a][b][c][d]表示当前的第一堆牌顶部为第a张,底部为第b张时,第二堆同理,先手最多能获得的分数。搜的时候枚举每次的四种取法,最大值即为所求。#include #include #include #include #in原创 2013-05-30 20:53:01 · 1777 阅读 · 0 评论 -
HDU 4499 Cannon 解题报告
通化邀请赛题意:一个最多5*5的棋盘,上面已有一些棋子(不是炮),现在要放置一些炮上去,使得按照中国象棋的规则不能互相吃掉对方。解法:题目没说清楚的地方是放上去的炮是不能移动的,但是题目里详细介绍了移动的规则。可以用状压做,状态(i,j)表示(0,j)~(i,j)的状态,若有无炮兵则为0,一个炮兵和一个棋子(棋子在后,在前的话相当于2)为1,有一个炮兵为2,两个炮兵为3.原创 2013-05-30 19:25:16 · 1982 阅读 · 0 评论 -
CodeForces 254 E Dormitory
题目题意:一个人,每天有食物供应,除了自己吃之外还可以给同学吃,或者将今天的食物留到明天,但不能留到后天。每天每个朋友只能喂一次,每喂一次加1点受欢迎度。求n天后的最大受欢迎度。题解:DP,记录昨天剩下多少食物,并且每天计算喂i个朋友的最小花费。注意食物不能留到第三天。本来以为400^3要很久呢,没想到CF升级后这么快了。//Time:62ms//Memroy:3600K原创 2013-08-13 11:45:19 · 721 阅读 · 0 评论 -
URAL 1936 Roshambo 解题报告
题目题意:n个人玩石头剪子布,每轮剩下的人同时出拳,如果出的拳有且只有两种,那么就可以淘汰掉输的人,否则不变。求只剩下一个人的期望轮数。题解:很简单的概率DP,但是对精度要求很高,long double 也不能满足要求,没办法只能先学java,写得丑请不要太介意……设dp[i]表示剩下i个人的期望,那么dp[1]就等于0了。对于其他的dp[i],有:dp[i原创 2013-08-12 22:19:56 · 1032 阅读 · 0 评论 -
HDU 4669 Mutiples on a circle 解题报告
题目题意:一串项链,每颗珠子上有一个数字,任选连续的一段,按顺时针顺序将它们的数字拼起来,若新的数字是k的倍数,则这个数字是一个 wonderful value 。求有多少个 wonderful value 。题解:由于K非常小,我们可以用dp[j][i]表示以第j个数结尾的所有数字中模k为i的方案为多少,那么计算dp[j+1][i]的时候乘上偏移值并加上j+1个珠子的值就行了。复原创 2013-08-14 11:17:14 · 796 阅读 · 0 评论 -
CodeForces 173 C. Spiral Maximum 解题报告
题目题意:题目定义了一种环形的结构spiral,对于所有size的spiral求最大的和。题解:观察第一个和第二个图,可发现第一个图加上左上角左边的格子就是第二个图的白色部分,所以可以容斥。//Time:280ms//Memory:2000KB#include #include #include #include #include #include #i原创 2013-08-16 13:41:48 · 710 阅读 · 0 评论 -
HDU 4679 Terrorist’s destroy 解题报告
题目题意:有一棵树,要删掉一条边,删边后形成两棵树,要求两棵树的最长直径的最大值乘以删掉的边权的值最小。题解:两次DFS:第一次计算出从当前点到叶子的最长三条无公共边的链。第二次,如果要删掉某条边,就可以知道两棵树的最长直径了:一条是当前子树的最长链,一条是祖先的不包含当前子树的最长链。又忘了开栈开关……据说这题的数据特别水,把边权全当1,输出最长链的短链也原创 2013-08-15 21:08:05 · 994 阅读 · 0 评论 -
HDU 4570 Multi-bit Trie 解题报告
题目比赛题意:这道题最难的就是题意了 我们根据样例YY出来简化的题意:给出一个长度为n的数列,将其分成若干段,要求最小,其中ai是每一段数列的第一项,bi是每一段的长度,l为将数列分成l段。 比如样例:n=7,A={1 2 4 4 5 4 3},将其分成1 2 4| 4 5| 4| 3,则其所用空间为1*2^3+4*2^2+4*2^1+3*2^1=38,而如原创 2013-07-06 12:06:18 · 1296 阅读 · 5 评论 -
UVALive 5790 Ball Stacking 解题报告
题目题意:有n层堆成金字塔状的球,若你要选一个球,你必须把它上面那两个球取了,当然也可以一个不取。求选的球最大的权值和。题解:将这堆球转成举行,第一行是(0,0),第二个是(1,0)和(0,1)……如果选(i,j)的话,(i,j)到(0,0)之间的都要选。先把f(i,j)=(i,j)+……+(0,0)预处理出来。然后用dp[j]表示在j这一列有球被选,且j+1~n-1没选过的最原创 2013-09-01 20:56:32 · 1171 阅读 · 0 评论 -
UVA 12589 Learning Vector 解题报告
题目题意:有一些向量,选择K个将它们首尾相接,并且一端固定在原点上。求和X轴包围起来的面积。题解:对于选定的k个向量,肯定是按照斜率从大到小接在一起,由于向量的长度小,所以可以用背包,dp[i][j]表示最右的y坐标为i及选了j个向量的最大面积。//Time:732ms//Length:1095B#include #include #include #incl原创 2013-08-27 21:43:37 · 1434 阅读 · 0 评论 -
UVA 12587 Reduce the Maintenance Cost 解题报告
题目题意:一个有n个城市m条道路的图,如果一条边删除后,有些城市变得不可达,则它需要维护,花费为L×D,L是道路长度,D是变得不可达的城市对数。每条道路维护花费由连接的城市中的一个承担。城市本来也有固定的维护花费。求所有可能中,花费最大的城市的最小花费。题解:首先可以用tarjan求桥,如果(u,v)之间为桥,且u为父亲,则回溯时已遍历的点数-dfn[v]+1就得到和v在同一双连通原创 2013-08-27 22:02:32 · 1180 阅读 · 0 评论 -
HDU 4711 Weather 解题报告
题目题意:有m座城市w种天气,已知每天从城市i到城市j的概率,和每座城市每种天气的概率。已知n天的行程每天的天气,求最有可能的这n天每天在哪座城市的序列。多组解输出字典序最小的。题解:直接DP,一天天枚举从i到j地转移。由于n最大1000,直接乘精度受不了,最好取log,并且注意概率为0时返回结果为nan,所以自己手动设一个-INF吧。比赛时3个人读题都看到了旅行了n+1天,并原创 2013-09-08 21:07:15 · 1539 阅读 · 2 评论 -
HDU 4722 Good Numbers 解题报告
题目题意:求A~B之间的数,有多少数字的各位和可由整除10。题解:简单数位DP,直接求就好。//Time:234ms//Memory:360KB//Length:868B#include #include #include using namespace std;#define MAXN 100010int arr[30];long long d原创 2013-09-12 20:31:05 · 694 阅读 · 0 评论 -
HDU 4714 Tree2cycle 解题报告
题目题意:一棵树,删一条边或加一条边的花费都是1.求将这棵树变成以条包含全部点的没有多余边的环的最小花费。题解:也就是,先将树分成尽可能少的m条链,然后再把这m条链首尾连起来,花费是2×m-1.类似于树上最长链的做法,以每个点为根的树,求全部分成链的最少数目b,和去掉一条链的最少数目a。前者可选两棵子树的a加上其它子树的b,后者同理,详见代码。//Time:1359原创 2013-09-08 20:57:06 · 908 阅读 · 0 评论 -
HDU 4734 F(x) 解题报告
题目题意:对于十进制数n,各位数是AnAn-1An-2 ... A2A1,定义函数 F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1。求[0,B]中,有多少个数i的F(i)题解:由于指数从10变成了2,所以数变得特别小,999999999也就4599.所以可以预处理,dp[i][j]表示[0,10^i-1]之间原创 2013-09-15 10:25:41 · 814 阅读 · 0 评论 -
ZOJ 3431 Escape! 解题报告
题目题意:主角要从一座塔中逃脱,每一层除了出口外,还有不超过5个的宝藏,而且每层还有倒塌时间。求在成功离开的前提下,能拿到的最大财宝价值。题解:对每一层做预处理,计算从入口选择某几个宝藏再到出口所花的最少时间。然后对每层做dp[i],i表示到这层的时间为i,然后枚举所有选宝藏的方案来转移。//Time:190ms//Memory:280KB//Length:26原创 2013-09-27 22:16:21 · 915 阅读 · 0 评论 -
HDU 4770 Lights Against Dudely 解题报告
题目题意:有矩阵n*m,每个单元是一个房间,有些房间可被照亮有些不能,可被照亮的房间最多15个。在(x,y) 放置灯那么 (x,y+1 )和 (x+1,y)都会被照亮,但是有一盏灯可以转动90或者180或270度。问使得所有可被照亮的房间都被照亮且不可被照亮的房间不被照亮需要的最少的灯,不可能则输出-1.解法:可以用状压,枚举哪个房间放灯及灯转动的角度,然后看每个可照亮的房间是原创 2013-11-18 19:26:53 · 1188 阅读 · 0 评论 -
HDU 4661 Message Passing
题目题意:有n个人呈树状结构,每个人知道一个独特的消息。每次可以让一个人将他所知的所有消息告诉和他相邻的人。求所有人都知道所有消息花时花的步数最少的所有方案数。题解:首先最少步数一定是全部人的消息都单向传到某个人后,这个人再传回去给所有人,也就是每条边走且只走两次。如果所有消息单向传到某个人的方案数是K,那么他再传回去的方案数也是K。那现在只考虑单向传递时的方案:对于一原创 2013-08-09 13:05:27 · 1027 阅读 · 0 评论 -
HDU 4655 Cut Pieces
题目题意:有N个blocks,每个block可以染的颜色为1~ai。连续的同颜色的blocks为一个piece,设N个blocks的某种上色方案的pieces数为s个。现在给你a序列,求将a重新排序后,所有上色方案的s的和的最大值是多少。题解:我的方法很麻烦……首先取得最大值的a的排序方案可以是:如果a序列有序,则 新序列为 a1 an a2 an-1 ……YY出来的,用暴力验原创 2013-08-09 12:52:56 · 757 阅读 · 0 评论 -
SPOJ AMR12E Dyslexic Gollum 解题报告
题目题意:在所有长度为n的01串中,不包含长度大于等于K的回文字串的串有多少个。题解:注意到K非常小,所以可以用状压。记录长为i和最后K个字符的串的个数,那么最后加个1或者0都不能使回文串长度大于等于K。即预处理所有的K种后缀里面,以最后一个字符为右端点的回文串的最长的和第二长的长度,即左端点的位置,那么加上1或者0之后就知道是否长度增加了。//Time:350ms/原创 2013-08-04 14:00:48 · 1280 阅读 · 0 评论 -
UVAlive 5869 Airport 解题报告
题目Tri_integral Trainning 4题意:一个图,有两种点:旅店和旅客中心。要建一个机场p,对于每个旅店i,用 s(p,i)表示从机场到某个旅客中心再到这个旅店的最短距离。每个旅店有一个旅客人数t(i),要使 s(p, i)×t(i)的最大值最小。机场可以建在任意点上或边的某个位置上。题解:首先用floyd处理任意一个点作为机场的各 s(p, i)。然后原创 2013-07-29 21:36:24 · 1240 阅读 · 0 评论 -
ZOJ 3687 The Review Plan I 解题报告
题目题意:n天要复习n本书,每天只能复习一本。有些天不能复习有些书,求可行的方案数。题解:因为n很小,所以可以用容斥做。注意m行不能复习的情况里面有矛盾的。//Time:320ms//Memory:180KB//Length:1090B#include #include #include #include using namespace std;#def原创 2013-07-27 18:45:52 · 949 阅读 · 0 评论 -
HDU 4609 3-idiots 解题报告
题目2013 多校训练 第一场题意:有10^5条边,任选三条能组成三角形的概率?题解:因为边很多,所以要用FFT。将边长变换后,对应元素自乘,再逆变换,就可以得到所有两条边和的方案数。但是由于同一条边可能选两次,所以要去掉这种情况。用一个pre[i]来记两条边和大于i的方案数,枚举三角形的最长边,那么另外两条边的和必须比它大,但是这样算出来的方案数还包括了最长边也在原创 2013-07-26 19:23:05 · 1012 阅读 · 0 评论 -
HDU 4616 Game 解题报告
题目题意:给出一棵树,树上每个节点都有权值,某些点有陷阱。可以任选起点,每个点只能走过一次,如果走到某点不能再走或者走到某个点恰好走了C个陷阱就停在该点,问最后路径上点权之和能得到的最大值。题解:树形DP。用dp[u][j]表示以u为根的子树上,从某点走到u且走过j个陷阱能得到的最大值;考虑如果最优解走过了k个陷阱,如果k!=C,那么其起点和终点都可以为没有陷阱的点,如果k=C原创 2013-07-26 18:29:24 · 1914 阅读 · 7 评论 -
HDU 4618 Palindrome Sub-Array 解题报告
题目2013 多校第二场 总结题意:有一个全由数字组成的矩阵,你要找到一个最大的子正方形,且这个正方形每一行每一列都是回文串。题解:先假设正方形的边长len为奇数,那么对于中心点(x,y),所有的(x-len/2,y)~(x+len/2,y)(y同理)都要是至少回文半径为len/2+1的回文串。如果我们事先用manacher求出所有的行和列的回文半径的话,用rmq就知道(x原创 2013-07-25 18:57:52 · 1291 阅读 · 0 评论 -
URAL 1389 Roadworks 解题报告
题目题意:一棵有n个点的树,可以选择一些边,但是同一个点连出的边最多选一条,求最多可以选几条,且输出方案。题解:树形DP,每个点记录两个值:连向儿子的边中,选一条的最优值和一条都不选的最优值。//Time:93ms//Memory:5925KB//Length:1648B#include #include #include #include #include u原创 2013-07-07 16:16:47 · 1058 阅读 · 0 评论 -
UVa 12018 - Juice Extractor 解题报告
题目题意:切水果,告诉你每个水果出现时间和消失时间,没有炸弹。任何时候你都可以切水果,一切就会把全部都切掉,当超过3个或三个水果被切时,就是连击,连击分等于水果个数。问最大的连击分数。解法:按出现时间排序,然后问题转为在某些水果出现后切掉全部在场水果的DP问题。可以用一个按消失时间排序的优先队列。一开始理解错题意,以为可以不切完,所以错了三次。Time:595m原创 2013-05-18 18:58:09 · 984 阅读 · 0 评论 -
HDU 4628 Pieces 解题报告
题目2013 暑假多校训练 3题意:一个字符串,每次可以删掉一个子序列,且这个子序列必须构成回文串,求全部删完的最少次数。题解:枚举要删除的子序列,剩下的继续删除,记下每个部分的最少删除次数。代码写得很挫……//Time:125ms//Memory:560KB#include #include #include #include #include原创 2013-07-30 19:33:10 · 946 阅读 · 0 评论 -
ZOJ 3689 Digging 解题报告
题目题意:有n个房间,要在T天内建造。每个房间都有建造所需时间ti和面积si,当建造完成时,获得的金币是t×si(t为开始建造这个房间时的剩余时间)。如果一个房间建造完后剩余时间已经为负了,那这个房间不给钱。题解:首先按si/ti排序(用乘法)。由于有可能不能全部建完,所以不能直接贪心,要用背包(见下面两个样例)。2 200100 200200 4003 1原创 2013-07-27 18:52:33 · 985 阅读 · 0 评论 -
HDU 4571 Travel in time 解题报告
题目比赛题意:一个无向图,从起点出发,T时间内要到达终点。所有点都有一个景观值,可以游览,但是游览需要额外的时间,而且游览的景点的游览值必须比前一次要大。求最大的游览值和。题解:按游览值排序,用一个dp[i][j]数组表示j时间游览了i的最大游览值和。只能从前面的游览值比i小的转移。注意是从起点出发的,最后要到终点(游览终点的话时间也要算在T内)。//Time:156m原创 2013-07-06 10:43:34 · 982 阅读 · 0 评论 -
UVA 12540 Warp Speed II 解题报告
题目题意:一艘宇宙飞船,有N种状态,H种HOP。状态间转移和每种状态释放每种HOP的花费是不一样的。题目给出一些HOP序列,对于有i个HOP的序列,要按顺序释放每个HOP,释放每个HOP时的状态无所谓,但是初始是0状态,结束必须是0状态,而且0状态是不能释放HOP的(也就是必须变化成别的状态才行),还有不能转移几次状态后才能释放下一个HOP(所以不能用floyd预处理),保持状态不变也有花原创 2013-08-05 20:59:55 · 1082 阅读 · 0 评论 -
HDU 4632 Palindrome subsequence 解题报告
题目2013 暑假多校训练 4总结题意:一个字符串,有多少个subsequence是回文串。题解:用dp[i][j]表示这一段里有多少个回文串,那首先dp[i][j]=dp[i+1][j]+dp[i][j-1],但是dp[i+1][j]和dp[i][j-1]可能有公共部分,所以要减去dp[i+1][j-1]。如果str[i]==str[j]的话,还要加上dp[i+1][原创 2013-08-01 18:00:04 · 1110 阅读 · 0 评论 -
HDU 4604 Deque 解题报告
题目题意:按序给你一些数,每个数你可以加入双端队列(初始为空),且任何时候都可以弹出元素。求最后能保留在双端队列中的最长不下降子序列长度。题解:以 4 5 6 4 2 1 为例:首先从右至左做最长不下降子序列,设为A序列,这些序列可以每次加到队首。其次从左至右做最长不上升子序列,设为B序列,这些序列可以每次加到队尾。那么A和B各选一个序列拼成答案,由于一个从队首进一个原创 2013-07-23 19:32:29 · 1458 阅读 · 2 评论 -
UVA 12013 Entertainment 解题报告
题目5.1 training 1题意:网球比赛:一场比赛由5场轮换发球的sets组成,五局三胜制。一场set由轮换发球的games组成,至少得6分且领先对方4分获胜。一场game由同一个人发球的scores组成,至少得4分且领先对方2分获胜。已知一个人自己发球和对方发球时赢得一个score的概率,且一开始由他先发球,求赢得比赛的概率。题解:比赛的时候想来想去原创 2013-07-20 12:12:38 · 1156 阅读 · 0 评论 -
HDU 4568 Hunter 解题报告
题目比赛题意:一个n×m的网格图,每个格子有一个数字,表示从这个格子出发到相邻格子所需时间,-1表示不能经过。有一些格子上有宝藏,求拿完所有能拿的宝藏所需的最少时间。题解:由于宝藏很少,所以可以状压。首先以每个宝藏为起点做一次SPFA,就可以得到两个宝藏间的最短路(单向),还有离开网格图的最短路(如果不能离开就是不能取)。然后状压,dp[i][j]表示最后选的宝藏是i,j表原创 2013-07-06 10:52:56 · 853 阅读 · 0 评论 -
ZOJ 3725 Painting Storages 解题报告
题目题意:有n个珠子,每颗可以涂红色或者蓝色,求至少有m个连续珠子为红色的方案。题解:枚举第一次出现m个连续红色珠子的位置p,则[p+m,n]随意,即方案为2^(n-p-m+1),p-1必须为蓝,关键在[1,p-2]不能有连续m个红色的。假设g(i)表示i个珠子中没有连续m个红色的方案数,显然在i>=m时,g(i)=g(i-1)+g(i-2)+...+g(i-m),g(i+1)原创 2013-07-01 18:54:45 · 1314 阅读 · 0 评论 -
poj-openjudge 1037:City Metro 解题报告
题目2013北大校赛总结题意:某城公交有n个车站,每天发m趟车(单向),行走时间及顺序均固定。有p个乘客,告诉你他们到达某个车站等车的时间,需要你安排m趟车,使得他们都能上车,并且总的等待时间最短。解法:将所有乘客的之间转换成假如一道车站就上车那么到终点站的时间。然后对这个时间数组进行排序,然后我们就要将数组分成m个区间,每个区间表示区间里的乘客乘同一辆车。剩下原创 2013-05-18 00:34:14 · 1067 阅读 · 0 评论 -
HDU 4778 Gems Fight! 解题报告
题目题意:有一些背包,每个包里有一些宝石,A和B两人轮流操作,每次可以选一个包,将里面的宝石都放到公用坩埚里。如果坩埚里有某种颜色宝石的数目不少于s个,那么每s个这种颜色的宝石可以变成一个魔法石。如果操作者选完包后能得到魔法石,则他可以再操作一次。每个人都是最优策略(宝石尽可能比对方多),且可操作的时候必须操作,求A最多可以比B多多少魔法石。题解:可以用状压来做,i为哪些包选了,j原创 2013-11-18 20:15:15 · 1286 阅读 · 0 评论