随笔分类 - ACM&ICPC
摘要:(一)巴什博弈(BashGame):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。很容易想到当n%(m+1)0时,先取必胜,第一次先拿走n%(m+1),以后每个回合到保持两人拿走的物品总和为m+1即可。这个游戏还可以有一种变相的玩法:两个人轮流报数,每次至少报一个,最多报十个,谁能报到100者胜。(二)威佐夫博弈(WythoffGame):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是:(0,0)、(
阅读全文
摘要:广度优先搜索(BFS)的原理和应用二叉树中的层序遍历就属于一种BFS(Board First Search)层序遍历会得到ABCDEFG的层序优先序列(BFS序列)。在层序遍历过程中,可以注意到先访问的节点的孩子节点必然先被访问(如访问了A后访问B和C,那么B的孩子结点一定在C的孩子结点前被访问――仅针对下一层的孩子而言)。据这个特性,可以用队列来实现这个遍历。void Layer(bitree *p){queue Q; //定义一个队列node *N;Q.push(*p); //起始点入队while(!Q.empty()){N=Q.front();Q.pop();coutdatalchild
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2094以前都不知道这道题该怎么过,今天听同学说了,其实思想很简单。用了最近在学的STL就把它给A了。思想:讲输入的全部人都放入一个容器base中,将全部输的人放入另一个容器base1中,最后将两个容器的size相减一下就可以了。得到1就说明能产生冠军。 因为要是能产生冠军的话,全部人中只有冠军是没有输过的,其他的人肯定是输过的!所以,容器base的大小肯定比base1大1。My code: #include#include#include#includeusing namespace std;int main
阅读全文
摘要:今天还是在温习以前看过的算法,感觉还是很陌生似得!先粘贴下别人博客上的Dijkstra算法的具体步骤:Dijkstra算法又称为单源最短路径,所谓单源是在一个有向图中,从一个顶点出发,求该顶点至所有可到达顶点的最短路径问题。 设G=(V,E)是一个有向图,V表示顶点,E表示边。它的每一条边(i,j)属于E,都有一个非负权W(I,j),在G中指定一个结点v0,要求把从v0到G的每一个接vj(vj属于V)的最短有向路径找出来(或者指出不存在)。 Dijstra算法是运用贪心的策略,从源点开始,不断地通过相联通的点找出到其他点的最短距离 基本思想是: 设置一个顶点的集合s,并不断地扩充这个集合,一个
阅读全文
摘要:这一题其实是一道背包问题的变形(完全背包问题)——可以转意为:将重量为1~N的物品放入容量为N的背包,求方案数。可以得出状态转移方程:d[i][j] = d[i-1][j] + d[i][j-i]解释为:用前i个数组成j = 用前i-1个数组成j + 用前i个数组成j-i(即没用数字i的组合数+用了数字i的组合数,两者为i,j的组合方案,且互斥)由转移方程可得填表顺序如下图所示:其中,横轴为i,纵轴为j,方向为从上到下,从左到右,之前还要进行基本项的初始化,不难理解,即d[i][0] = 1; d[0][j] = 0; 最后是边界处理,根据题意,填表只需要填j >= i的情况,当d[x]
阅读全文
摘要:一般要做到50行以内的程序不用调试、100行以内的二分钟内调试成功.ACM主要是考算法的,主要时间是花在思考算法上,不是花在写程序与debug上。下面给个计划你练练:第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码, 因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打 出来。1.最短路(Floyd、Dijstra,BellmanFord) 2.最小生成树(先写个prim,kruscal要用并查集,不好写) 3.大数(高精度)加减乘除 4.二分查找. (代码可在五行以内) 5.叉乘、判线段相交、然后写个凸包. 6.BFS、DFS,同时
阅读全文

浙公网安备 33010602011771号