随笔分类 - ACM
摘要:排序算法: 基本:冒泡,快速,选择,堆,插入,shell 多路并归:1.冒泡排序: 思想:交换排序,通过相邻的交换来达到排序的目的。 流程: 1.对数组中的各数据,依次比较相邻两个元素的大小。 2.如果前面的大,交换。经过一轮,可把最小的排好。 3.然后用同样的方法,把剩下的数据排好。最后从小到大排好相应的数据。#include #include #define SIZE 10using namespace std;void BubbleSort(int *a,int len){ int temp; for(int i=0;ii;j--) { if(a[j-...
阅读全文
摘要:穷举算法思想: 一句话:就是从所有可能的情况,搜索出正确的答案。步骤: 1.对于一种可能的情况,计算其结果。 2.判断结果是否满足,YES计算下一个,no继续步骤1,然后判断下个可能的情况。实例: 孙子算经--鸡兔同笼:头35,脚94,几鸡几兔? #include //头文件using namespace std;int qiongju(int head, int foot , int *chicken,int *rabbit) //穷举算法{ int...
阅读全文
摘要:1 推荐题库•http://ace.delos.com/usaco/美国的OI 题库,如果是刚入门的新手,可以尝试先把它刷通,能够学到几乎全部的基础算法极其优化,全部的题解及标程还有题目翻译可以baidu 一个叫NOCOW 的网站。•http://livearchive.onlinejudge.org/上面有全部的赛区真题,绝大部分都可以提交,不适合当题库刷,不过在这里找题非常方便。•http://poj.org/不解释了,中国最知名的oj,题量非常之大,历史也很悠久,推荐刷一些代表性的题目。•http://acm.timus.ru/Ural 大学的oj,国外oj 中非常好的一个,题目非常锻炼
阅读全文
摘要:c++指针|指针入门什么是指针? 其实指针就像是其它变量一样,所不同的是一般的变量包含的是实际的真实的数据,而指针是一个指示器,它告诉程序在内存的哪块区域可以找到数据。这是一个非常重要的概念,有很多程序和算法都是围绕指针而设计的,如链表。开始学习 如何定义一个指针呢?就像你定义一个其它变量一样,只不过你要在指针名字前加上一个星号。我们来看一个例子: 下面这个程序定义了两个指针,它们都是指向整型数据。int*pNumberOne;int*pNumberTwo; 你注意到在两个变量名前的“p”前缀了吗?这是程序员通常在定义指针时的一个习惯,以提高便程序的阅读性,表示这是个指针。现在让我们来...
阅读全文
摘要:分治算法一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1时,不需任何计算。n=2时,只要作一次比较即可排好序。n=3时只要作3次比较即可,…。而当n较大时,问题
阅读全文
摘要:一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。 由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一
阅读全文
摘要:DP在ACM的算法里面可算是重中之重,题目类型千变万化,题目难度差异也很大.是一种很讲究技巧的算法,而且代码实现相对容易,1y率非常高(除有些bt数据外).总之DP就是一向非常重要,又非常博大精深的算法.我们学校的Roba的大牛在这方面就有很深的造诣. 说一下自己这几天接触的初级DP,DP中最重要的往往是状态和状态之间的转移,找到状态转移方程,用递归或者是递推的方式列出方程,题目也就迎仞而解了,而所谓的难题往往是初看不知所措,找不出状态转移方程,或者根本连什么是状态的都看不清,下面分析一下有关DP的非常经典的3个问题: 1.求局部最大和 大意是这样给你一个数组,在其中取任意连续多个,使其...
阅读全文
摘要:初期:一.基本算法: (1)枚举. (poj1753,poj2965)(2)贪心(poj1328,poj2109,poj2586)(3)递归和分治法.(4)递推.(5)构造法.(poj3295)(6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:(1)图的深度优先遍历和广度优先遍历.(2)最短路径算法(dijkstra,bellman-ford,floyd,heap+dijkstra)(poj1860,poj3259,poj1062,poj2253,poj1125,poj2240)(3)最小生成树算法(prim,kruskal)(poj1
阅读全文