- 博客(14)
- 资源 (5)
- 收藏
- 关注
原创 Codeforces Round #245 (Div. 1)B 递推DP
1000 * 1000的图,交点就一个,而且如何相交于一点 画一画就会发现就两种情况,所以首先想到的是可以暴力枚举交点,然后由交点往前推,相交过后两个人继续朝自己目的地前进,所以可以先 暴力枚举 并 递推出每一个点 到这个图的 四个顶点的 最大值,然后根据相交的两种情况取最优的一个即可int mp[1000 + 55][1000 + 55];int dp1[1000 + 55][
2014-08-29 18:36:30 692
原创 ZOJ3471 MostPowerful 状压DP
同类类于poj3311,但是要简单,不用转什么弯子直接 十种气体 每种是否存在的状态 s,然后 dp[s] = max(dp[s],dp[s - {被碰的气体状态}] + 两气体相碰获得的价值);想起来不难,写起来也算比较简单int n;int dp[1<<12];int mp[10 + 5][10 + 5];void init() { memset(mp,0
2014-08-20 19:58:23 893
原创 HDU3001 Travelling 状压DP
哭瞎啊,每个城市可以经过至多两次,但没有要求必须经过两次,想用 两个状压来乱搞搞,结果自认为会T,结果 WA了,搞了一下午,没想到用三进制啊,智商捉急,参考了http://blog.csdn.net/lenleaves/article/details/7980955 这个博客每个城市可以经过1或2次,所以三进制可以代表所有状态了,接下来处理方式类似于二进制的,只是没有了位运算一些判断
2014-08-18 20:04:53 748
原创 Codeforces Round #250 (Div. 1) B 并查集
坑!神坑!深坑!,WA了几十把,最终答案 (ans * 2)/(n * 1.0 * (n - 1)) 要是写成(ans * 2)/(n *(n - 1)*1.0)就是WA,不明白为啥,愤怒的我 全改成double就可以了,若前面变量用了int的 答案必须是前一种写法,题目不是特别难,没啥思路画一画就有思路了,10^5的n去扫肯定是要超时的,那就想想一次性的10^5,发想通过m是可以的,建边,
2014-08-18 15:08:27 781
原创 Codeforces Round #261 (Div. 2) D 树状数组应用
看着题意:[1,i]中等于a[i]的个数要大于[,jn]中等于a[j]的个数 且iint n;int aa[1000000 + 55];int bb[1000000 + 55];int c[1000000 + 55];map mp;ll lowbit(ll x) { return x&(-x);}void add(int i,int val) { while
2014-08-16 20:36:55 878
原创 POJ3311 Hie with the Pie 状压DP
今天好不容易切了两道这样的题目,第一道就不提了,完全是题目有特殊情况没判,基本上是入门型的了,这道还不错的,而且有个博客写的特别的好,http://www.tuicool.com/articles/aUnAru转一下他的状态方程:记dp(v, S)为从v点出发,遍历S集合中的每一个点后,回到出发点(0点)的最短距离。递推表达式的推导如下:如果 S 为空集,即没有需要遍历的结
2014-08-15 23:19:39 877
原创 Codeforces Round #221 (Div. 2) D
有点郁闷的题目,给了2000ms,但是n,m的范围已经是5000了,5000 * 5000一般在别的OJ已经是超了2000ms,一开始不敢敲,看了下别人有n*m的潜逃循环,原来CF的机子如此的强大,一开始题意没看清错了,原来任意行可以交换,列不行那就先dp出 每一行的 每一个位置包括它本身以及前面的连续出现1的长度,然后再对列进行处理,因为列是不能变的,所以对应列是固定的,那么就对列枚举,然后
2014-08-15 14:40:33 635
原创 POJ3254 Corn Fields 状态压缩DP
看了这位博主的经历http://blog.csdn.net/lenleaves/article/details/7972224感觉有些差不多,因为CF比赛状压被虐 所以开始刷刷题,从最简单的开始复习吧,细节处理很差,唉DP方程跟一般的有些不一样,dp[i][j]表示在状态i的情况下 到第j行的摆放有多少种,然后总数就是 dp[i][n - 1]求和,以第一行为边界往下推,第一行
2014-08-13 22:54:30 816
原创 CodeForces Round#229 DIV2 C 递推DP
对这道题目也只好说呵呵了,没注意k的范围最大才10,所以昨晚纠结了很久,没什么好的方法来处理,后来无奈想去翻翻题解,发现人家开头就来了句,因为k的范围比较小 所以.........我只好暂停马上回头看看题目,是的,k比较小所以完全可以先在询问前预处理DP一遍,DP就比较清晰了,dp[i][j] (i>=0 && i=i && j int n,k,w;char s[100000
2014-08-13 15:16:26 659
原创 Codeforces Round #224 (Div. 2) D 暴力搜索加记忆化
题意读了半年,英语太渣,题意是摆两个棋子在棋盘上作为起点,但是起点不能在#上,然后按照图的指示开始走, 右 ^上 v下,走的时候只能按照图的指示走,如果前方是 #的话,可以走进去,但是 走进去之后便不能再走了,走的途中两个棋子不能相碰,但是最终都走到同一个#里是没事的,并且若是能走 无限步的话 输出 -1, 例如 > 一开始被输出-1给困住了,因为除了 .> <这样以外 还可以刚
2014-08-11 21:13:47 854
原创 Codeforces Round #224 (Div. 2) B 数学推理
挺有意思的一道题目,一开始发现了循环节,做了一下,发现许多小地方要补,比较繁琐,做了几个小时的无用功吧,但是循环节肯定可以只是我写搓了,后来又推了公式,发现可以的首先当b=x的时候,这个时候只有c--,但是答案要求的 是多少次,在b=x,所以第二部分对答案有影响,但是 设方程的话 就不需要多设一个未知数,因为 第一部分肯定 是要进行(c - a)次才行推一下b第一步: b1 =
2014-08-11 14:40:40 739
原创 Codeforces Round #251 (Div. 2) D 二分
题目:http://codeforces.com/contest/439/problem/D是个不错的题目,首先多画几个不难发现,若要满足题目条件有可能 a数组的最小值要不断增大,也有可能b数组的最大值不断减小,一开始直接用了优先队列,发现了不对的地方,因为没一次 有两个情况 要么a加要么b减,所以不能直接来,多画几个不难发现,我们需要找到一个值 x是的 a中所有元素都大于等于x,而b
2014-08-03 21:08:20 679
转载 优先队列版子
优先队列用法在优先队列中,优先级高的元素先出队列。标准库默认使用元素类型的优先队列的第一种用法,也是最常用的用法:priority_queueint> qi;通过故示例1中输出结果为:9 6 5 3 2第二种方法:在示例1中,如果我们要把元素从小到大输出怎么办呢?这时我们可以传入一个比较函数,使用functional.h函数对象作为比较函数。
2014-08-03 19:50:17 488
原创 Codeforces Round #252 D 置换群的简单应用
题目:http://codeforces.com/contest/441/problem/D 对于这道题目,也只能用 长知识 来安慰自己了,数学知识面有点狭窄,一开始在往逆序数方面想,发现不行,后来又强行模拟去搞,发现有漏的情况,后来看了 巨巨博客发现了新知识推荐题解:http://www.cnblogs.com/xiaohongmao/p/3777794.html
2014-08-01 21:30:14 809
输出素数C++
2014-11-10
MyInteger类
2014-11-10
TicTacToe游戏
2014-11-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人