
Dynamic Programming
文章平均质量分 69
haha593572013
这个作者很懒,什么都没留下…
展开
-
hdu 3033 分组背包 每组至少选一个
View Code //要注意dp转移的时候两重循环的顺序,w[x](鞋子的价格) 可能为0,如果换一下顺序可能会导致某双鞋被选了两次#include#includestring.h>int dp[11][10010];int belong[10010];int w[10010],v[10010];int flag[20];int max(int a,int b原创 2013-08-19 18:48:39 · 686 阅读 · 0 评论 -
Codeforces Round #181 (Div. 2)
题目链接A ,B虽然是水题,但要是没想清楚就容易掉进某个坑里。。C:预处理出所有可能的和,然后每个每个和分给a b两个数D:比赛的时候题目没看懂,题意就是说在一个n*n的正方形网格中分割k次有几种分法,每次分完后剩下的四个子矩形必须为正方形。考虑到最后可以分割log级别的次数,而且每分割一次,又出现了四个空白的子正方形,自然就可以想到dp,很明显的子结构啊。我们不妨从小到大构造,每多一原创 2013-04-30 14:56:53 · 1144 阅读 · 1 评论 -
BZOJ 2599 Race 点的分治
http://www.lydsy.com/JudgeOnline/problem.php?id=2599题意:给一棵树,每条边有权.求一条路径,权值和等于K,且边的数量最小. (我会告诉你这就是题面?)BZOJ的题就是好啊!一句话题意,赞一个。这道题的思路还是点分治 ,类似于前面那篇文章里的两题,只不过转换成了求最小而不是计数,,,每次找好重心u后,我们只考虑以u为根的子树原创 2013-04-25 01:51:39 · 1442 阅读 · 0 评论 -
codeforces 13C. Sequence
给你一串5000长度的数,要你将某些数变换一下,是的新的数列非递减。。。这种题目可以左偏树来做的。。。数据范围大点也没关系,不过,,既然是5000,那就用一个n^2的吧首先有个性质,就是变换后的数还是原来序列中的数,,,为为什么?假设每个数都是一棵某一高度的树,现在如果如果发现某个范围内的树的高度不满足单调性,那么就应该去改变某棵树的高度,要么增高它,要么砍掉一点,那增高或者砍掉到哪个值呢原创 2013-04-14 11:39:06 · 1587 阅读 · 0 评论 -
zoj 3697 恶心模拟 +简单DP
一些数据108 _ _ _ _ _ |_|_| |_| |_|_| |_|_|_|_|_|_|_| 03 _ _ |_|_| |_|_| 141|||||||||01 _ ||||_|07 _ _ _ _ _ _ |_|_ _|_|_|_| |_|_|_|_|_|_|1078 7原创 2013-04-21 01:16:38 · 1454 阅读 · 0 评论 -
Codeforces Round #179 (Div. 1)(完全)
raiting 又掉了,明天早上爬起来继续搞,heheA题:好像用数组打标记的方法更简单,反正我直接套了两个树状数组。。。。http://codeforces.com/contest/295/submission/3507289B题:本场比赛的败笔,在更新最短路的时候姿势不够正确,然后交了几遍才过。。做法就是倒着搞,如果更新了某点对的最短路,就要减去相应的差值。http:/原创 2013-04-12 17:16:42 · 1789 阅读 · 1 评论 -
Codeforces Round #175 (Div. 2) E Positions in Permutations
好题一枚,比赛的时候众神牛没几个能A出这道题,囧,,,这里有个题解,我看了这个才懂的,包括下方的讨论 http://codeforces.com/blog/entry/7126定义一个good position,如果一个位置是good的,则这个位置的数abs(p[i]-i)=1,也就是说i位置要么放i+1,要么放i-1.现在问你长为N的排列有多少个排列恰好含有K个good posi原创 2013-03-26 21:47:25 · 1475 阅读 · 0 评论 -
Codeforces Round #174 (Div. 1)(完全)
比赛地址A:直接贴了个模板,我有罪。。。。B:dp[i][2],表示从i出发的结果(要么走到挂,要么循环),记忆化搜索就好了,每次要注意判环C:问你有多少种组合满足Q个条件,每个条件的形式是硬币a出现的次数 大于 硬币b出现的次数 ,先类似于传递闭包搞一下,判掉自己大于自己的情况,然后再用背包来做,每次放进来一个硬币就相当于把出现次数比这个硬币多的硬币都放进来了,由此知道了物品的体积原创 2013-03-18 03:20:36 · 1430 阅读 · 0 评论 -
Codeforces Round #177 (Div. 1)(完全)
这场略水,不然我是来不及打开第四题的,不过最后也没做出来。。。。。小小的涨了108分D:求一棵树中有多少对不相交的路径,正着搞比较难,反着搞就简单多了,c(n,2)*c(n,2)减去非法的对于每个子树,分为在子树内部相交 和 外部的点延伸到子树内部两类,都剪掉就好了#include#include#includeusing namespace std;i原创 2013-04-03 16:14:19 · 1478 阅读 · 0 评论 -
Codeforces Round #171 (Div. 2)(完全)
D:状态DP,DP[S]表示到达S状态需要的最少的箱子数,有一个关键的条件是,A序列中的数是一个一个一次产生的,所以怎么转移就知道了int dfs(int flag) { if(dp[flag]!=-1) return dp[flag]; if(flag == 1) return dp[flag] = 1; int ans = inf; int bits =原创 2013-03-08 21:27:43 · 1250 阅读 · 0 评论 -
Codeforces Round #178 (Div. 2)(完全)
比赛地址:http://codeforces.com/contest/294C题:蛮有意思的,给你m个位置,现在要从这m个位置往位置的两边扩展,问你把所有的数都扩展到总共有多少种方法。在两个位置中间的那些数的可能的排列数应该是2^(k-1),因为每次都有两种选择,要么左端点,要么右端点。然后从所有的间隔中各取出一种排列,a1 a2 a3 b1 b2 b3 c1 c2 c3,现在就是原创 2013-04-08 03:19:40 · 1887 阅读 · 3 评论 -
树形 DP 好题推荐 2013/2/4更新
树形DP题目集锦zju 3231 题解 状态比较新颖CF 23E 题解 将树切成若干连通块,求所有块的点数乘积的最大值,可以贪心也可以DP。原创 2012-11-06 23:24:38 · 1033 阅读 · 0 评论 -
codeforces round 160(完全)
又跪了。。。继续做吧,坚持!!codeforces 261B 先用背包处理出一个dp数组,然后枚举每一个分隔数(即前面的数再加上这个数就超过p了) 统计出所有的数量,然后直接算,,http://www.codeforces.com/contest/261/submission/2921844codeforces 261C首先可以计算出m+1行有几个1 (画一画就原创 2013-01-14 03:07:21 · 1545 阅读 · 0 评论 -
树形DP代码汇总
zoj 3231给你一棵100个点的树,每个点上有一些苹果,然后现在让你将一些点上的部分苹果转移到其他点上,使得最后所有点上的苹果数量的方差最小,通俗的讲,就是使得每个点上的苹果的数量尽可能的平均,即任意两个点的苹果数量的差距不超过1,所以这里有一个特点,点数只有100,即那些多1个苹果的节点也不超过100,所以状态就很好想了dp[i][j]表示i 子树有 j个点的苹果的数量是tot原创 2012-11-06 23:24:14 · 1251 阅读 · 0 评论 -
codeforces 23E 树形DP
题目链接给你一棵树,让你切断一些边,使得剩下的每个连通块的点的个数的乘积最大,输出这个乘积。n 首先,答案肯定要用高精度保存。。。。可以贪心,也可以背包。随便画一画可以发现剩下的连通块中,不会有某块包含长度>=3的路径,因为可以找到中间的那条边切断,使得这个路径分成两段a 和 b (a>=2 ,b >=2), a*b>=a+b根据这个推论 , 可以分三种情况1:以u原创 2013-02-04 14:56:02 · 1530 阅读 · 0 评论 -
Codeforces Round #165 (Div. 1)
A:求出对于每堆箱子满足条件的最大的那个就好了,因为对于两个“大箱子” A B,里面各自都嵌套了很多相同的小箱子,体积小的那一个必然可以放进体积大的那一个(2^k),体积相等时也可以合并为1个,因为题目保证每种箱子都是不一样大小,所以A 或 B中的箱子的体积肯定是不同的,所以可以将A中的所有箱子放入B中,(假设A中箱子的体积较小),所以可以通过不断的合并合并成最大的那个。B:尽可能通过少的移动原创 2013-02-02 13:07:15 · 1140 阅读 · 0 评论 -
codeforces 162 div 1(完全)
A. Escape from StonesB. Good Sequences C. Choosing BallsD. Colorful Stones:s串的每个字符对应T串中一个匹配的区间,但是要注意XXXc1c2 xxxxc2c1这种状态不可达到 , 所以要剪掉,参考rnq_58的代码E. Roadside Trees官方题解(很详细了)线段树优化DP原创 2013-01-27 12:03:32 · 1413 阅读 · 0 评论 -
codeforces 256 D Liars and Serge
戳这里看题目题意看了很久才懂,题解又搞了许久才懂,敲的时候连组合数C[i][j]都敲错了.......这或许就是被考试折磨的下场,下学期尽量在前半学期不要落下太多的功课吧。这道题关键是真真假假,假假真真 - -题意是说有n个人,有些人说真话,有些人说假话,每个人都知道所有人是说假话的还是说真话的,现在问他们每一个人:说真话的人有多少。每个人都会给出一个答案ai,说假话的人会随便原创 2013-01-04 17:49:53 · 1391 阅读 · 0 评论 -
The 2006 Benelux Algorithm Programming Contest 解题报告
这段时间水水poj。。一场场做或者一个专题一个专题做题目链接poj 3053 : 贪心吧,两种情况,每次都用最接近的分数来对抗当前分数poj 3055: 水题,模拟过去就好了poj 3056: DP,如果i,j能连上了,那么i+1,j-1就是一个递归的子结构,好像是n^3的算法,。。。。反正暴力出奇迹。。。poj 3057::挺好的题,,,一开始建图建错了,搞了半天,要把某个时原创 2013-06-06 19:38:36 · 1444 阅读 · 0 评论 -
SRM 585
250 :递推,从左下角到右下角走一条,剩下的都是子结构const int mod = 1000000007;long long dp[1000010] , s[1000010];class TrafficCongestion{ public : int theMinCars(int n) { long long ans = 0; d原创 2013-07-20 13:01:26 · 1273 阅读 · 0 评论 -
SRM 582
250:最大的最小,最小的最大之类的题。。二分+验证600:是个好题,整了好几天才整明白。题意: 给你n个数1 2 3。。n,代表n个楼,每个数有一种颜色,数值就代表building的高度,原创 2014-02-07 02:57:05 · 1722 阅读 · 0 评论 -
srm 605
250: 有最多50个物品,每个物品有一个type标号,并且有一个taste值,现在要求选择若干个物品使得x * y最大,x为选择的物品种类的总数,y为总的taste值之和贪心,然后对于每种物品,如果有大于0的物品存在,就不要小于0的那些了,因为他们不能增大x,只会减少y。如果某一种物品只有小于0的,那就只可能选择一个绝对值最小的。按照每种物品能选择的值从大到小排序,枚举种类数贪心算即可。。原创 2014-01-24 23:52:56 · 1531 阅读 · 0 评论 -
SRM 601
ORZ芒果爷!!!!!http://blog.youkuaiyun.com/merlininice/article/details/17496799250pt : 刚睡醒就打开题目,题目都看不懂,最后才180分。。500pt 不会,逗逼了整场。。update: //////////////////////补题///////////////////////////////500pt原创 2013-12-23 18:43:17 · 1540 阅读 · 0 评论 -
SRM 600
250:题意:给你50个数,问你最少去掉多少数能使得剩下的数不可能具备子集S,OR起来为goal如果一个数不是goal的子状态,那么我们没必要删除他,所以我们只关心goal的子状态的数1:如果所有的数OR起来都没有到达goal,那么就是02:每个数都会贡献一些位,去掉1的个数最少的那一位就好了600:题意:给你一个14*14的01矩阵,现在要反转最少的网格使得矩阵至原创 2013-12-22 09:37:37 · 1630 阅读 · 0 评论 -
Codeforces Round #219 (Div. 1)(完全)
戳我看题目A:给你n个数,要求尽可能多的找出匹配,如果两个数匹配,则ai*2 排序,从中间切断,分成相等的两半后,对于较大的那一半,从大到小遍历,对于每个数在左边那组找到最大的满足条件的数配对用一个变量移动一下就好了。这样的配对数量肯定就是最多的。因为1:如果左边那一半数量取少一点,比如取a1 a2 a3...ak (k 那实际上ak+1 ak+2 .. a n/2 这些数原创 2013-12-18 20:05:01 · 1444 阅读 · 0 评论 -
SRM 597div2 1K
题意:n1,2,3,4,5,6.。。n问你有多少个数字集合,不包含重复的数位好题数位dp 预处理 cnt【state】,然后背包注意11这种,本身重复的也不行#include #include #include #include #include #include #include #include #include #include #include原创 2013-11-24 02:38:40 · 1748 阅读 · 0 评论 -
2013 ACM/ICPC Asia Regional Hangzhou Online(解题报告) 正在更新
hdu 4745 Two Rabbits 求一个环形序列的最长双回文子序列,可以先在后面补一段来破环,但仔细观察可以发现这个题并不需要破环,比如 cdedcba fff ab ,可以将ba fff ab组合,然后前面剩下的还是回文的。hdu 4747 Mex 此题太神,找了份代码研究了一下,边看又边思考,发现了单调性,然后果断涨姿势。 首先可以发现mex原创 2013-09-16 03:44:24 · 2590 阅读 · 0 评论 -
SRM 452 div1(practice)
1000pt: 题意:问你由0~9构成长度为n的非递减序列而且能整除m的序列的个数。(n 仰慕某些能一眼看出来性质的神牛,反正我是没看出来,看出那个关键的性质后,问题就是一个简单的DP了。 关键性质:这样一个非递减的序列肯定能由小于等于9个形如(1111...111)的数构成,而且(1111.....111)(n个1)必须要存在(保证n位)。原创 2013-08-11 17:54:10 · 1554 阅读 · 0 评论 -
ABBYY Cup 3.0 - Finals(总结)
题目链接D题真的有点难写,,,不过写完后发现,也还行(我冒着可能万劫不复的心态研究了下tourist的代码),尽管如此,写的时候还是感觉各种不顺,还好1A了,不过肯定得重写,。这种题非常锻炼代码能力。这场比赛如果参加的话能暴涨啊。虚拟比赛的时候很快就做完了A B C ,然后D题不会做,暴力懒得写,写了的话估计还能涨点。A题:题意:给你一个序列,让你挑出一个子序列,子序列的两端必原创 2013-08-22 21:58:07 · 1918 阅读 · 2 评论 -
hdu 4626
盯着CLJ那神奇的两行代码看了半天啊,最近我的智商真心让我感到蛋蛋的忧伤,,,,,各位出题人能不能不要在题解上加上任何带情感色彩的词语啊啊啊啊啊。。。比如,“简单的dp”。。。。。。研究了一下午,,,233333333说到这个题,其实可以通过预处理之后,对于每个询问,用容斥来做,或者像标称那样暴力,枚举一个集合的母集,然后减掉。题解都说的很清楚了,我就不多说什么了,毕竟是别人的原创 2013-08-10 23:20:25 · 2002 阅读 · 2 评论 -
SRM 449 div1 (practice)
250pt: 暴力枚举所有的可能的情况就好了,求面积的时候我是用梯形的面积减去两个三角形的面积。。550pt:题意:给你一个蜂窝形状的特殊图形,有一些格子已经被占据了,问你将剩下的格子用1*2的砖块尽可能的铺满的总方案数,见下图。此题想了半天,隐约感觉可以dp,但是无从D起,,,膜拜了下rng_58的超短代码(大部分人选择dfs转移),但是rng_58将图转换成网原创 2013-08-08 08:40:36 · 1238 阅读 · 0 评论 -
poj 2411 新写法
别以为我在刷水题。。。。今天做了场srm,500pt想到了是dp但是无从下手,但是看了rng_58的神代码后顿觉海阔天空啊(盯着看了一个下午),相比于一年前的写法,真的是不忍直视啊,TC真是个好地方。。。赞!其实就是将普通的铺砖块问题用类似于插头dp逐格递推的思路来写。下面的代码相信大家应该都能看懂。#include #include #include long long d原创 2013-08-07 16:39:37 · 1665 阅读 · 0 评论 -
SRM 451 div1 (practice)
250pt: 1234+ 12340+ 123400+ 1234000+ 12340000+ 123400000+ 1234000000------------ 1371110974一个数的magic source是最小的一个正整数x,满足sigma(x*10^i) [i=0~n] =原创 2013-08-05 16:51:53 · 1105 阅读 · 0 评论 -
codeforces round 156 div1
div1 :A : 找最长的子序列,只包含两种数且每两个相邻的数都不相同,dp[i][j]代表以第i个数结尾上一个数是第j个数的最长的序列http://codeforces.com/contest/255/submission/2787851B: 问你一个点经过几次扩散式的染色才能够染不小于C个方格,很明显的二分答案判可行,不过在判断可行的时候还真是有点小纠结,想仔细了就okhtt原创 2012-12-19 01:51:21 · 1325 阅读 · 0 评论 -
codeforces 157 div1(完全)
我是div2选手!!!碰上了自己不擅长的数位DP,各种囧啊,前三题水的一逼,我还wa了一次,然后妥妥的掉分了A题:如果有零的话,去掉从左往右数的第一个0即可B题:这类题目以后要多多加强啊,这道题先预处理出cnt[i],表示有i个lucky dig的数有多少个,这个过程用到了数位类DP的基本方法处理出来后可以用一个dfs暴力求得答案戳这里看代码C题: 让你构造一个序列原创 2012-12-24 03:08:14 · 2057 阅读 · 3 评论 -
zoj 3537 三角剖分 简单区间DP
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4472图片来自 : http://blog.youkuaiyun.com/woshi250hua/article/details/7824433题意:求将一个凸包切成若干个三角形的最小代价解法:上面的链接已经讲的很详细了,我就不多费口舌了#include #in原创 2012-08-13 23:38:55 · 1152 阅读 · 0 评论 -
zoj 3602 树的同构 计数
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3602省赛题,当时队友用朴素的哈希,妥妥的WA了整场,今天用map重写了一下好简单啊- -!题意:给你两棵树,问你有多少子树u v是同构的,u属于第一棵树,v属于第二棵树。用一个map,int>就可以了表示左右两棵子树合并在一起映原创 2012-08-12 16:14:48 · 1396 阅读 · 0 评论 -
poj 2127 zoj 2432 codeforces 10D 最长上升公共子序列
链接:http://poj.org/problem?id=2127也不知怎么的就一下子一起搜到了这三个题,结果被坑了,在CF上AC的代码拿到poj 和 zoj都不能A,然后开始疯狂的造数据,终于被我造出了一组,然后发现开一维数组搞不定这个问题(反正我是搞不定了),于是还是老老实实的开了二维的dp,递归输出路径这种DP应该很经典也很简单吧,dp[i][j]表示a数组的第i个数与b数组的第原创 2012-08-12 14:27:12 · 1810 阅读 · 0 评论 -
codeforces 16 E 简单概率DP
http://codeforces.com/problemset/problem/16/E题意:有n条鱼,每天恰好会有一对鱼相遇,并且其中的一条会吃掉另一条,给你一个n*n的矩阵,a[i][j]表示i吃掉j的概率,题目保证a[j][i]=1-a[i][j],最后让你求每条鱼存活的概率做法:n比较小,所以可以考虑状态压缩,dp[state]表示当前还剩state状态的鱼的概率显然,每原创 2012-08-12 14:36:16 · 1347 阅读 · 0 评论 -
light oj 1128 倍增法LCA + DP
题意:一棵树,每个点都有一个点权,给你q个询问a b,求a到根节点的路径中点权大于等于b且最接近根节点的点编号刚开始想用树链剖分搞,后来听说用倍增+DP也行做法:如果懂倍增法求祖先的方法的话,那么这个DP就能很快理解了,详情见代码dp[i][j]表示i到i的2^j祖先的路径上的点权的最大值那么在找的时候只需要log(n)的复杂度就可以找到最上面的点权大于等于b的啦#原创 2012-08-11 18:34:46 · 1933 阅读 · 0 评论