混沌DM

DM Hunter

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2013年1月21日

摘要: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3684题目意思是: 给定一个n个节点的树,边有长度和权值。然后求一个最小值值Power,当把权值小于等于Power的边全部破坏时,所有的叶子节点都和中心点不连通。 题目保证树的中心唯一。首先两次dfs求出树的直径,然后在这条路径上找到中点。从任意点进行第一次dfs求得数的直径的一个端点,从这个端点dfs求得另一个端点然后遍历直径,找到最接近直径一半的点就是中点。然后以中点为根,进行树形DP(dfs)对于一个点point来说,所需要的最小Power为,Min(Max(所.. 阅读全文
posted @ 2013-01-21 19:12 混沌DM 阅读(619) 评论(0) 推荐(0) 编辑

摘要: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3682题目意思: 有两种球迷,分别有s1、s2人,然后有n个广场,每个广场ki个人。每个广场要么只有一种球迷,要么两种球迷数量相等。问安排数量注意题目有一个比较重要的条件 Sum(ki) == s1 + s2,漏看这个条件的话,此题难度就#¥@¥%#%……@……¥有了这个条件,我们可以知道每个广场都是满的。我们考虑人比较少的那个球迷,取s = min(s1, s2)每个广场要么全部分给该类球迷,要么不分给该类球迷,如果该广场能容纳的人数为偶数,则亦可以选择一半为该球迷。. 阅读全文
posted @ 2013-01-21 18:50 混沌DM 阅读(378) 评论(0) 推荐(0) 编辑

摘要: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3681题目意思稍微有些抽象,不好叙述。这里直接讲方法首先O(sqrt(n))预处理出n的所有约数。对于一个数k,至多需要(k+1)/2个人而对于k的每一个约数a(a>1),则需要ans[a] * ans[k/a]人,当然取一个最小值。按n的约数从小到大DP即可,。代码如下: 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algor 阅读全文
posted @ 2013-01-21 18:39 混沌DM 阅读(335) 评论(0) 推荐(0) 编辑

摘要: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3685这道题刚开始想了其他很多思路,包括DP什么都没有头绪。当时还有40多分钟,就想要专心过这题了。然后就写了复杂度为O(2^n)的程序,算出了前25个之后,发现从第15个开始,答案不是0就是1。分析一下可以发现,改变正负号不改变结果奇偶性,当1 ~ n中奇数为奇数个时,答案就为奇数,不然就是偶数。可以计算得到1^3 + 2^3 + ... + n^3 = n^2 * (n+1)^2 / 4如果n>=15时,假如答案不是0就是1这点成立,等价于从1^3, 2^3 , 阅读全文
posted @ 2013-01-21 17:54 混沌DM 阅读(464) 评论(0) 推荐(0) 编辑

2013年1月11日

摘要: 题目:度熊的复仇Time Limit:1 Seconds Memory Limit:65536K度熊是个喜欢打DOTA的人,有一天他打DOTA的时候被对面的拉比克完全压制,于是他决定选一个自己的拉比克去报仇。现在,度熊的面前有很多敌人,他可以选择对任意一个敌人施放“弱化能流”。“弱化能流”有连锁反应,连锁的时候伤害不会减弱。如果这个人被击中了那么和他距离在D以内的敌人也会同时被击中,同时会一直这样连锁下去直到条件不满足。每次施放“弱化能流”只会对同一个敌人造成1次伤害,当敌人的血量小于等于0时这个敌人就会死去,但是依然存在,就是说还是可以继续被连锁和向外连锁。度熊的拉比克有个特性就是有“一击必 阅读全文
posted @ 2013-01-11 19:10 混沌DM 阅读(319) 评论(0) 推荐(0) 编辑

2012年12月24日

摘要: 题目:Alice和Bob又开始发明新游戏了,这回的名字叫消去游戏。消去游戏的道具是一堆排成一行的积木,每个积木上面都有一个数字Ai。同时游戏也需要M个额外的数字Di,作为消去的判断条件。当连续的K个积木数字相邻的差值都相同并且和某个Di相等时,即构成一个长度为K等差为Di的等差数列时,他们可以拿去这一段积木,然后不改变剩余积木的顺序,将他们合并。显然,每次至少要消去2个积木。现在他们希望知道,在一个给定局面下,能最多消去的积木数目。Input输入第一行为T,表示有T组测试数据。每组数据以两个整数N,M开始,具体意义与描述相同。接着的一行包括N个整数,表示排成一行的积木数字Ai。接下来的一行是M 阅读全文
posted @ 2012-12-24 18:27 混沌DM 阅读(387) 评论(0) 推荐(0) 编辑

2012年12月7日

摘要: http://acm.hdu.edu.cn/showproblem.php?pid=4477题目意思: 给你一个长度为n的线段,要求至少分成两段,使得每段的长度各不相同。问分解的方案数。首先考虑,若分解成k段,则n的值至少为1+2+3+4+...+k=(k+1)*k/2所以本题k的最大值为315考虑dp[k][n]表示长度为n的线段分解成k段的方案数。其中分为两种情况 k段均大于一,则将每段的长度减1后,与dp[k][n-k]的方案数相同。 k段中有一段是1,则去掉这段长度为1的,有k-1段,且长度均大于一,与dp[k-1][n-k]方案数相同,这是k>2的情况。特殊的,k=2时,n=1 阅读全文
posted @ 2012-12-07 22:59 混沌DM 阅读(375) 评论(1) 推荐(0) 编辑

2012年12月2日

摘要: http://acm.hdu.edu.cn/showproblem.php?pid=4476题目意思: 给定n条边,每条边可以选择切成两条,或者不切,询问最多能得到多少长度一样的边。首先由于长度均为正整数,我们取长度为1,则答案至少为n,所以长度的取值应该小于等于 MaxLength/2.0 ,否则,答案不会超过n。而对于给定的长度,所能得到的边的长度是可以直接算出来的,小于这个长度的能得到0条,等于这个长度2倍的能得到2条,其余的能得到一条。为了避免0.5小数,代码里枚举的i是 长度的2倍。代码: 1 #include<cstdio> 2 #include<cstring& 阅读全文
posted @ 2012-12-02 14:18 混沌DM 阅读(201) 评论(0) 推荐(0) 编辑

摘要: http://acm.hdu.edu.cn/showproblem.php?pid=4475题目意思: 给定边长为n的正三角形,如图分成单位三角形,然后从顶点出发,到最下层的任一点,问有多少种方案。 其中,防线可以是水平和向下,但不能走回头路。递推:ans[n]=ans[n-1]*n*2对于ans[n],考虑ans[n-1]到达第n-1层,第n-1层有n个点,对于每种方案,均可平移至n个点中的任意一个(若为本身,则相当于没动),对于下一步,有左右两种方案。可以整理得ans[n]=n! * 2^n,所以n>=mod时,答案为0。最近在练java,所以代码是java的 1 import ja 阅读全文
posted @ 2012-12-02 13:59 混沌DM 阅读(171) 评论(0) 推荐(0) 编辑

2012年11月18日

摘要: http://acm.hdu.edu.cn/showproblem.php?pid=4466题目意思: 给定一个长度为n的铁丝,将其分成有顺序的若干份,每份折成三角形,要求所有的三角形相似。 三角形顺序不同视为不同方案,三边相等视为同一方案。求方案个数。首先定义f(x)表示周长为x的三角形个数。我们用(a,b,c)表示一个三角形,其中a <= b <= c将f(x)的所有三角形分为两部分,b=c 和 b!=c 的 b = c 的三角形个数 a至少为1,c的最大值为floor((x-1)/2) a<=b<=c,所所以c的最小值为ceil(x/3) 个数为floor((x- 阅读全文
posted @ 2012-11-18 15:36 混沌DM 阅读(1116) 评论(0) 推荐(0) 编辑