Visitors hit counter dreamweaver
上一页 1 ··· 13 14 15 16 17 18 19 20 21 ··· 26 下一页
摘要: 记得上学期我也搞了一点遍历的,BFS,DFS还有回溯遍历,但当时搞得不是很深入。再次拾起,感觉很熟悉,嘿嘿,不错不错。 回溯搜索的递归实现如下: void trace( int depth,….) { int i; if (depth>目标深度) { 输出方案;return;} for (i=depth深度可能决策范围) if( 决策i符合展开条件) { 记录决策i; try(depth+1); 删除决策i; }} 骑士巡游问题描述 在 n × n 方格的国际象棋棋盘上,马(也称为骑士Knight)从任意指定的方格出发,以跳马规则(横一步竖两步或横两步竖一步),周游棋盘的每一个 阅读全文
posted @ 2012-03-10 19:50 Jason Damon 阅读(5326) 评论(1) 推荐(0)
摘要: 自从暑假开始真正做ACM题以来,到现在,把并查集,线段树,树状数组学习了一遍,也AC了有20题了。说实话,那种AC的感觉是很爽的。但是,AC之前的那段调试时间是那么的让人纠结啊。哈哈,虽然假期在家里没有多少的成效,但自从来了学校后,那效率还是挺高的哦~这一阶段的时间拉得有点长了。没关系,万事开头难,现在既然已经选择了走这条路,虽说不是为了竞赛,但这是很能锻炼自己的能力的,所以,我会坚持下去的。下一阶段,我将会用两周左右的时间把搜索及相关方面的知识认真学习。慢慢来,算法这东西要多摸索,呼呼~ 加油!!出发吧! 阅读全文
posted @ 2012-03-10 02:00 Jason Damon 阅读(321) 评论(0) 推荐(0)
摘要: poj2828 对方法不理解透彻!照搬是没有用的,要彻底理解。一些特殊情况没出什么问题。但一当到大量数据的测试时,WA了!哎,幸亏慢慢找还能找出来,不然我今晚就耗在这睡觉都睡不好了。嘿嘿! 好了,最近这段时间对并查集,线段树,树状数组的学习就先告一段落了。总的来说这段时间的成效还是不错的哦。明天开始我要进入关于搜索的学习,加油吧,孩子。继续学习,继续刷分去吧!呼呼~#include <iostream>#include <fstream>#include <algorithm>#define MAXN 200200using namespace std;st 阅读全文
posted @ 2012-03-10 01:51 Jason Damon 阅读(612) 评论(0) 推荐(0)
摘要: 这道题搞了我好久啊。。。真的好久,心中的一个疙瘩!最后还是求助我们班的大牛,再上网看看别人写的。才弄出来。。不容易啊。不过和别人的对比之后,才发现自己的代码还是不够“美”。好好努力吧,孩子#include <iostream>#include <algorithm>#include <fstream>#define MAXN 40005using namespace std;struct seg_tre{ long long l,r; long long h; struct seg_tre* pLeft,* pRight;}Tree[MAXN*3];stru 阅读全文
posted @ 2012-03-09 22:24 Jason Damon 阅读(309) 评论(0) 推荐(0)
摘要: #include<cstdio>#include<cstring>#include<iostream>using namespace std;const int M=8010;struct Tree{ int l,r; int cnt;}T[3*M];int a[M],ans[M];int n,N; void build(int l,int r,int p){ T[p].l=l; T[p].r=r; T[p].cnt=r+1-l; if(l==r) return ; int mid=(l+r)>>1; build(l,mid,p<<1 阅读全文
posted @ 2012-03-08 23:59 Jason Damon 阅读(263) 评论(0) 推荐(0)
摘要: 这题的关键是方法。怎么才是相交的呢?一种方法是线段a的左边比线段b的左边小,同时a的右边比b的右边大。这时就可以构成一个相交。于是,我们可以根据左边的值来做降序排列,然后根据线段树来统计crosses。排名还在上升中。加油!#include <iostream>#include <cstdio>#include <fstream>#include <algorithm>#include <memory.h>#define MAXN 1005using namespace std;int M,N,K;int C[MAXN];struct 阅读全文
posted @ 2012-03-08 22:14 Jason Damon 阅读(229) 评论(0) 推荐(0)
摘要: 思路很重要,能想到从后面开始算,最后一个的值加上一就是它的具体位置了。依次类推,就能得到前面的位置。我刚开始在想,一般方法也能做出来呀,为什么要用树状数组呢。。? 效率!!树状数组可以提高效率。同样时用数组,它就要比一般的数组要快。关键还是要想到,还有就是理解树状数组。 感谢:http://www.cnblogs.com/rainydays/archive/2011/06/04/2072849.html前辈们铺好的路,让我们后人能走得更快。每AC一题,那种感觉是豁然开朗的,怎一个爽字了得! 没做出一题,我的排名就上升了快1000名,呼呼 ~加油!没有什么可以阻挡你的!#include < 阅读全文
posted @ 2012-03-07 23:44 Jason Damon 阅读(1317) 评论(0) 推荐(0)
摘要: 主要参考:http://1.congzhao.sinaapp.com/?p=1014 非常感谢。让我学习了 非常累,今天没什么状态啊。。。。好了,今天就到这吧。 要换编译器了。VC++不合适做OJ上面的题#include <iostream>#include <algorithm>#include <fstream>using namespace std;#define N 20100int n; //牛的个数struct Node{ long long v,x; bool operator<(Node a){ return v<a.v; }}n 阅读全文
posted @ 2012-03-06 23:50 Jason Damon 阅读(186) 评论(0) 推荐(0)
摘要: POJ1195 其实只要把它的原理弄懂的话,树状数组真的很简单的。关键要把握两个点:1.更新一个a元素的时候。如果a[i]更新了,那么以下几项都需要更新:c[n1],c[n2],c[n3],....,c[nm];其中n1=i,n(i+1)=ni+lowbit(ni);nm+lowbit(nm)必须大于a的元素个数N。2.sum(k)=c[n1]+c[n2]+...+c[nm];其中nm=k,n(i-1)=ni-lowbit(ni);n1-lowbit(n1)必须小于0。这两点弄请楚了,对于树状数组也很容易理解了。呵呵~ 而在这题里面,还有一个要注意的就是求和的时候,注意矩阵就范围的方法。好了. 阅读全文
posted @ 2012-03-05 23:04 Jason Damon 阅读(1565) 评论(0) 推荐(0)
摘要: 郭老师的分析: 一棵树上长了苹果,每一个树枝节点上有长苹果和不长苹果两种状态,两种操作,一种操作能够改变树枝上苹果的状态,另一种操作询问某一树枝节点一下的所有的苹果有多少。具体做法是做一次dfs,记下每个节点的开始时间Start[i]和结束时间End[i],那么对于i节点的所有子孙的开始时间和结束时间都应位于Start[i]和End[i]之间,另外用一个数组C[i]记录附加在节点i上的苹果的个数,然后用树状数组统计Start[i]到End[i]之间的附加苹果总数。这里用树状数组统计区间可以用Sum(Start[i])-Sum(End[i]-1)来计算。 第一次做树状数组的题。把源代码原原版版的 阅读全文
posted @ 2012-03-02 00:19 Jason Damon 阅读(337) 评论(0) 推荐(0)
上一页 1 ··· 13 14 15 16 17 18 19 20 21 ··· 26 下一页