摘要: http://codeforces.com/contest/242C题:给出一些线段,起点和终点,只能在线段上走,线段范围上限为1e9,但是线段的总长不超过1e5.做法:bfs+mapView Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cstdlib> 7 #include <sstream> 8 #include <iostream> 9 #include <cmath>10 #include <cstring& 阅读全文
posted @ 2012-11-13 13:25 發_ 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个长度为n的整数序列,求一个最长子序列,使得该序列的长度为2*k+1,前k+1个数严格递增,后k+1个数严格递减。分析:用O(nlogn)分别求出递增序列和递减序列,再O(n)求在某个位置符合条件的序列长度。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cstdlib> 7 #include <sstream> 8 #include <iostream> 9 #include <cmath>10 #in 阅读全文
posted @ 2012-11-10 15:11 發_ 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 题意:把字符串划分成尽量少的回文串。dp[i] = max{dp[j-1] + 1 | str[j....i]为回文串}。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cstdlib> 7 #include <sstream> 8 #include <iostream> 9 #include <cmath>10 #include <cstring>11 #include <algorithm> 阅读全文
posted @ 2012-11-08 22:58 發_ 阅读(480) 评论(0) 推荐(0) 编辑
摘要: 又是训练指南上的一道经典题~~ http://uva.onlinejudge.org/external/106/10635.html题意:有两个长度分别为p+1和q+1的序列,每个序列各个元素互不相同,且都是1~n^2的整数。求俩序列的LCS。分析:LCS的O(pq)复杂度显然太慢。注意到“每个序列各个元素互不相同,且都是1~n^2的整数”,所以有个巧妙的转换,把A中的元素重新按1~p+1编号,同时B也相同的映射编号,由于A为递增序列,所以LCS就是B中最长递增子序列,即LIS.这样就转换成求B的LIS问题,可以在O(nlogn)的时间内解决。LIS:设dp[i]为以A[i]结尾的最长上升子序 阅读全文
posted @ 2012-11-06 20:47 發_ 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 训练指南上的一道题目,感觉还不错。参考该书做如下总结:题意:一根长度为L的木棍上有n只蚂蚁,每只蚂蚁要么朝左要么朝右爬,求T秒后每只蚂蚁的位置和状态。分析:1)蚂蚁相撞“掉头”等价于“对穿而过”; 2)每只蚂蚁最后位置固定; 3)初始时按位置排序后,第i只蚂蚁不可能比第i+1只蚂蚁的距离远。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cstdlib> 7 #include <sstream> 8 #include <iostrea 阅读全文
posted @ 2012-10-29 20:06 發_ 阅读(683) 评论(0) 推荐(0) 编辑
摘要: 一些细节没处理好,wa了很多次。剪枝不强,跑了6000+ms。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cstdlib> 7 #include <sstream> 8 #include <iostream> 9 10 #include <cstring>11 #include <algorithm>12 #include <string>13 #include <utility&g 阅读全文
posted @ 2012-10-28 22:25 發_ 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 01背包的变形,因为概率P为浮点数所以不能作为背包容量,只能找能抢的最大金额作为容量。刚开始还傻傻地想求最小被抓的概率,但是细想被抓只有一次,所以只能求最大逃跑概率。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cstdlib> 7 #include <sstream> 8 #include <iostream> 9 #include <cmath>10 #include <cstring>11 #in 阅读全文
posted @ 2012-10-25 21:44 發_ 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 题意:给出长方体的长宽高,问能叠多高(上面一个的底的长宽要严格大于下一个)。分析:按底面积排序,设dp[i]为第i个能达到的最大高度,则dp[i] = max{dp[j]} + h[i] ; (j<i)View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cstdlib> 7 #include <sstream> 8 #include <iostream> 9 #include <cmath>10 #include 阅读全文
posted @ 2012-10-25 20:17 發_ 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 刚开始看错题意,以为防御全部都要缓冲,wa了几次,重新看题才知道是部分缓冲。ans = 总的攻击次数 - 防御次数View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cstdlib> 7 #include <sstream> 8 #include <iostream> 9 #include <cmath>10 #include <cstring>11 #include <algorithm>12 阅读全文
posted @ 2012-10-23 21:20 發_ 阅读(190) 评论(0) 推荐(0) 编辑
摘要: http://codeforces.com/contest/233/problem/C题意:求一个具有k个三元环的无向图。分析:先一个i个节点的无向完全图,其中C(i,3)<=k,剩下k-C(i,3)个三元环未构成,再加j条边(C(j,2)<=未构成的环)直到满足条件。View Code 1 /* 2 Author:Zhaofa Fang 3 Lang:C++ 4 */ 5 #include <cstdio> 6 #include <cstdlib> 7 #include <iostream> 8 #include <cmath> 9 阅读全文
posted @ 2012-10-15 13:25 發_ 阅读(155) 评论(0) 推荐(0) 编辑