- 博客(16)
- 收藏
- 关注
原创 百练 名人和佐助
这个题目就是一个bfs 加深了我对bfs的理解 :这个题其实不用vis 任何状态都扩展也能搜出来 只不过时间高一点 我们以前用vis的原因都是不用扫描 也就是剪枝这个题目中的剪枝在于扩展状态的时候 如果法力值比原来的法力值大 那么说明这个潜力比较大 ,可以更新状态,如果小于等于的话 一定和以前的一样甚至更差 所以根本不用考虑,刚开始要把f都设置为-1#include #include
2016-07-29 01:16:24 381
原创 poj2186 Popular Cows
#include #include #include #include #include using namespace std;struct node{ int s,e;}arr[50010];vector mat[10020];vector tmat[10020];int n,m;int vis[15000];int mark[15000];int cnt[1
2016-07-27 01:54:21 197
原创 求强连通子图的方法以及简单实现
刚学 其实操作很简单 正向建立一个图 跑一遍 标记上时间 然后反过来再跑一遍(注意有可能区域不联通) 标记markKorasaju algorithm#include #include #include #include #include using namespace std;int vis[300];int edge[300][
2016-07-26 23:52:18 2430
原创 线段树扫描线 hdu1542 Atlantis
这几天线段树学习中,但是扫描线这一段一直没写出代码来 努力了好几天终于可以了这里是写扫描线代码需要注意的地方:1.每次插入一条线段的时候 只有当该线段和该节点表示的线段恰好相等的时候,才对mark标记一下,即使是区间包含插入的线段也要向下推。2.不需要延迟标记,因为你插入了一条线段以后一定会完完全全的删除 3.每次更新的时候 ,先找到最底下一层(也就是插入线段和节点所管理的线段正好
2016-07-25 20:50:43 214
原创 线段树求逆序数
线段树是一类非常有用的数据结构 这个可以体现到求解一组序列的逆序数上来可以这么想 我们求逆序数的时候,对于每一个数字都找前面比他大的数字的数目例如 9 5 7 9这三个序列 我们先找5前面比5大的数字的个数 很明显是9 有一个我们继续找7前面比7大的个数 也是9 找 9 前面比9大的个数 和明显没有 按照这个想法实现的是O(n^2)的一个算法 复杂度不是很好 既然是区间操作
2016-07-23 22:43:19 2590
原创 codeforces 364 div2.c 神代码
标准的尺取 但是看到了一个写的非常好的代码 枚举的右边的边界 维护最左边一个的map数量是1 找最小答案就行了 学习了 真是语言之美#include #include #include #include #include #include #include #include #include #include #include #include #include #i
2016-07-23 03:26:45 358
原创 dfs的姿势 尽量减少不必要的搜索
好长时间不做搜索了 ,虽然做了一个简单的果断tle 和别人代码一比就看出高低了 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define inf 1e9+7
2016-07-21 22:03:30 249
原创 dp tsp问题 海贼王之伟大航路
TSP问题是一个np问题 但是我们可以通过伪多项式算法来实现 就是用状态压缩dpdp[i][j]:i是目前已经走过的城市的状态 j是在此状态下最后一个到达的城市 dp[i][j]表示到此时的最小用时 如果状态转移不合法 设置为-1 那怎么来递推呢 我们想一想 如果一个i要从 00000000001(二进制表示) 走过来 那么所走的状态一定都是小于i的 比如 i=000000101 要从
2016-07-21 21:13:55 750
原创 dp 计数问题 复杂整数划分 区间dp
百练的题目 : 让我对dp有了新体会 这是记忆化搜索写法 省了很多时间 并且状态转移的方式符合我们的认知 这个通过递推很难发现关系 但是讲区间搜索一下分解的话就可以计数了 并且在不影响结果的前提下自己规定了拿走数字的大小的方式和拿走的方向(能体会到这一点就好,这是写出来dp的关键 可以用复杂状态来表示准确的dp)三段solve 分别对应 三个问题#include #include #
2016-07-19 21:32:29 800
原创 百练 1088 dp
1088:滑雪查看提交统计提示提问总时间限制: 1000ms 内存限制: 65536kB描述Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例
2016-07-18 22:28:18 613
原创 dp 最佳加法表达式
有一个由1..9组成的数字串.问如果将m个加号插入到这个数字串中,在各种可能形成的表达式中,值最小的那个表达式的值是多少 思路 :这个问题我们不知道最优的加号放置方式 ,不妨可以从最后一个加号开始枚举,每次枚举一个之后记忆化递归下一个,效率非常高 提前预处理字符串也是很关键的。用dp[i][j]表示在前j个数字中插入i个+号所能形成的最小值.1.如果i==0 那么直接返回dp[0][
2016-07-18 21:13:29 778
原创 poj 3061 技巧
第一种方法 因为是递增序列 对于任何一个sum [i] 在 i到n之间二分找一下就可以了#include #include #include #include #include #include #include #include #include #include #include #include #define inf 1e9+7#define pi acos(
2016-07-17 20:15:22 225
原创 找负环 bellman ford 算法
#include #include #include #include #include #include #include #include #include #include #include #include #define inf 1e9+7#define pi acos(-1)#define natrule exp(1)using namespace std
2016-07-15 20:44:21 1515
原创 并查集操作
#include #include #include #include #include #include #include #include #include #include #include #include #include #define inf 1e9+7using namespace std;int fa[1005];int height[1005];
2016-07-13 17:21:15 280
原创 最小生成树算法
1.prim 类似于dijkstra 松弛就好 #include #include #include #include #include #include #include #include #include #include #include #include #define inf 1e9+7#define pi acos(-1)#define natrule ex
2016-07-13 14:47:01 305
原创 记忆化搜索简介
在dp的方面,记忆化搜索感觉不如递推好用,这是肯定的,但有些时候dp的转移过程过于复杂很难求解一个问题的时候其子问题都解决了,所以这个时候可以用记忆化搜索来解决记忆化搜索因为可以将已经求解的问题保存起来,所以求解非常快,这个方法的基本思想就是由下到上求解,先递归到最底层,然后层层向上去解决这个问题,在这中间会有重叠子问题,大大加快了求解过程,可以用memset 将dp的值全部设置为-1 表示不
2016-07-05 14:10:58 244
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人