自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Re_cover

Second is nothing.

  • 博客(38)
  • 资源 (4)
  • 收藏
  • 关注

原创 POJ 1833 排列

题目链接:http://poj.org/problem?id=1833next_permutation函数相关:使用next_permutation(p, p + n)函数需要包含头文件;next_permutation(p, p + n)的两个参数分别代表当前序列的起始地址和结束地址;它的功能是求当前序列p按照字典序排列的下一个序列;例如p={1, 2, 3},则p按照字

2013-11-13 09:54:10 742

原创 codeforces 301D Yaroslav and Divisors

题目链接:http://codeforces.com/problemset/problem/301/D题目大意:给定一个1~n的排列,以及m次询问,每次询问给出左右边界L,R,要你求出下标在[L,R]的数中,有多少对数满足一个数能被另外一个整除。算法与思路:一个数x在1~n内能被多少个数整除?答案是n/x;则1~n中有多少对数满足一个数能被另外一个整除的答案是sum[n]=

2013-10-09 19:40:35 1162

原创 HDU 3790 最短路径问题

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790SPFA——Shortest Path Faster Algorithm,它可以在O(kE)的时间复杂度内求出源点到其他所有点的最短路径,可以处理负边。SPFA的实现甚至比Dijkstra或者Bellman_Ford还要简单:设Dist代表S到I点的当前最短距离,Fa代表S到I的当

2013-09-26 21:53:35 729

原创 Dijkstra算法模板

Dijkstra算法是一种最短路径算法,用于计算一个节点到其它所有节点的最短路径,动态路由协议OSPF中就用到了Dijkstra算法来为路由计算最短路径。算法本身并不是按照我们的正常思维习惯,我们一般会,从原点遍历所有与之相连的节点,找到最短路径,再从最短路径上的那个点遍历与之相连的所有其它点(原点除外),然后依次类推。这样做虽然可以算出一个树形,但是在大多数情况下,这种算法会产生很多次优路径

2013-08-19 19:55:29 952

原创 Wiki OI 1225 八数码难题

题目链接:http://wikioi.com/problem/1225/算法与思路:康托展开(hash)+ bfs;这个题目的的搜索部分对于很多同学来说并不难,关键在于棋盘状态的储存;如果直接使用0~8组成的9位数作为数组下标,要开到8亿显然不现实,这个时候就要用到康托展开了;初次接触的同学请戳链接 康托展开-维基百科,上面讲的很详细。然后就是相对简单的bfs了,详见注释。

2013-08-07 22:06:23 1461

原创 Wiki OI 1282 约瑟夫问题

题目链接:http://wikioi.com/problem/1282/算法与思路:线段树;这个题目如果使用链表模拟出圈,时间复杂度为O(m*n);题目的数据规模是3W,显然会超时(当然如果数据水就不好说了);使用线段树的话却可以达到O(nlogn);首先递归建树,模版就不解释了;然后求相对位置seq,表示出圈者是当前圈中剩余者的第seq位;然后根据相对位置寻找seq的实际编号

2013-07-27 10:23:44 1460

原创 大数的四则运算

题目链接:http://wikioi.com/problem/3115/                    http://wikioi.com/problem/3116/    http://wikioi.com/problem/3117/                    http://wikioi.com/problem/3118/算法与思路:大数的加,减,乘算法比较简

2013-07-26 19:42:43 1518

原创 Wiki OI 1245 最小的N个和

题目链接:http://wikioi.com/problem/1245/算法与思路:K路归并 + 堆(优先队列),K路归并具体请参考刘汝佳《算法竞赛入门经典训练指南》P189;题目要求从两个长度为n的数列中各取出一数相加,可得到n*n个和,输出这些和升序的前n项;由于数据太大,不能通过先求和再排序的方式来求解,这个时候就要用到堆了;首先将a,b两数组排序,然后将a[i] + b[1

2013-07-25 21:46:20 1740

原创 Wiki OI 1174 靶形数独

题目链接:http://wikioi.com/problem/1174/算法与思路:状态压缩 + 启发式搜索想要看懂这篇题解需要有一定位运算的基础,初学者可以参考以下链接http://www.matrix67.com/blog/archives/263所谓启发式搜索,就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量

2013-07-20 16:05:50 1605

原创 Wiki OI 1163 访问艺术馆

题目链接:http://wikioi.com/problem/1163/算法与思路:树形dp,dfs;将博物馆的结构抽象成一棵二叉树,每条边都有对应的权值(走过这条边花费的时间),只在叶子节点有藏画,要求你在有限的时间内偷到尽可能多的藏画。点的信息按照深度优先顺序给出(前序遍历),建立一颗二叉树;然后从根节点开始深搜,每走过一条走廊到达下一个点,剩余的时间remain要减去

2013-07-20 08:55:50 1475

原创 Wiki OI 1039 数的划分

题目链接:http://wikioi.com/problem/1039/算法与思路:划分型dp,递推;将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。例如:n=7,k=3,下面三种分法被认为是相同的。1,1,5; 1,5,1; 5,1,1;因此将n划分份的一种方法唯一的表示为n1+n2+……nk,其中n1这样可以形象地把n的k份划分看作是把n块积木堆成

2013-07-19 17:18:06 1565

原创 Wiki OI 1082 线段树练习 3 (区间更新,区间求和)

题目链接:http://wikioi.com/problem/1082/算法与思路:线段树对于线段树的初学者,可以参考以下链接,里面有相关的习题和详解http://www.notonlysuccess.com/index.php/segment-tree-complete/题目意思很直白,区间更新区间求和,思路倒没什么多讲的,关键在理解代码。值得注意的一个地方是,与单点更新

2013-07-19 10:51:18 1512

原创 Wiki OI 1001 舒适的路线

题目链接:http://wikioi.com/problem/1001/算法与思路:并查集,首先枚举速度最大的那条边,然后把速度大于这条边的边都删掉,接下来的任务就是在残图中寻找一条路,路上的最小的那条边要尽量大。这个地方用并查集实现,对于剩下的边由大到小排序,然后逐个往集合里面加,直到某次加入操作后起点和终点被加到了同一个集合,这时停止操作,最后加的那条边就是一条所求的最

2013-07-17 22:21:57 2422 1

原创 Wiki OI 1063 合并果子

题目链接:http://wikioi.com/problem/1063/算法与思路:二叉堆的应用,所谓二叉堆就是指任意父节点都不大于或不小于其子节点的完全二叉树,这题使用的是小顶堆(根节点是所有节点中的最小值)。欲求最小消耗,则需要每次取最小的两堆果子合并,并将合并后的元素加入集合中,按照这种规则合并直到只剩一堆。很朴素的想法就是将元素排序,取出合并后插入有序队列中,重复取直到结束

2013-07-17 22:11:04 1217

转载 图解数据结构(8)——二叉堆

转载自http://www.cppblog.com/guogangj/archive/2009/10/29/99729.html首先说说数据结构概念——堆(Heap),其实也没什么大不了,简单地说就是一种有序队列而已,普通的队列是先入先出,而二叉堆是:最小先出。这不是很简单么?如果这个队列是用数组实现的话那用打擂台的方式从头到尾找一遍,把最小的拿出来不就行了?行啊,可是出队的操作是

2013-07-17 21:41:58 937

转载 图解数据结构(6)——树及树的遍历

转载自http://www.cppblog.com/guogangj/archive/2009/10/16/98772.html树,顾名思义,长得像一棵树,不过通常我们画成一棵倒过来的树,根在上,叶在下。不说那么多了,图一看就懂:当然了,引入了树之后,就不得不引入树的一些概念,这些概念我照样尽量用图,谁会记那么多文字?树这种结构还可以表示成下面这种方式,可见树用

2013-07-17 21:13:07 801 1

转载 图解数据结构(5)——散列法及哈希表

转载自http://www.cppblog.com/guogangj/archive/2009/10/15/98699.html数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表,哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法——

2013-07-17 21:09:25 1070

转载 图解数据结构(4)——二分法查找法

转载自http://www.cppblog.com/guogangj/archive/2009/10/15/98649.html如何从数组里找一个元素的位置?如果排列是无序的,我们只能从头到尾找,但如果排列是有序的,我们则可以用别的更好的方法,二分查找法就类似我们在英汉词典里找一个单词的方法。如下图所示(假如我们要查找的数字是“88”):下面我给出了一段demo代码,来演示

2013-07-17 19:27:57 831

转载 图解数据结构(3)——队

转载自http://www.cppblog.com/guogangj/archive/2009/10/14/98588.html前一篇讲了栈(Stack),队和栈其实只有一个差别,栈是先进后出,队是先进先出,如图:从图中可以看出,队有两个常用的方法,Enqueue和Dequeue,顾名思义,就是进队和出队了。队和栈一样,既可以用数组实现,也可以用链表实现,我还是偏向于用

2013-07-17 19:24:47 739

转载 图解数据结构(2)——栈

转载自http://www.cppblog.com/guogangj/archive/2009/10/14/98565.html前一篇讲解了最基本的东西,这篇就稍微前进一点点,讲一下栈,栈在英文中叫Stack,翻译成中文又叫“堆栈”,但决不能称为“堆”,这个要搞清楚,我们说的“栈”和“堆栈”指的都是Stack这种数据结构,但“堆”却是另外一个概念了,这里且不提。栈最大特点是先进后出

2013-07-17 19:20:12 704

转载 图解数据结构(1)——大圈表示法、动态数组和单向链表

转载自http://www.cppblog.com/guogangj/archive/2009/10/13/98476.html《数据结构》这门课是计算机专业的核心课程,但往往却让人头痛,因为比较抽象,当然了,也许你足够聪明,并不觉得它有多难,但对我而言,是有点难度,后来我仔细想了想,到底哪里难?我得出这么个结论:长篇大论,缺乏图表。现在的人都喜欢看电影,看电视剧,很少人还热衷于看小说吧,

2013-07-17 19:09:38 848

原创 Wiki OI 1080 线段树练习

题目链接:http://wikioi.com/problem/1080/算法与思路:树状数组,虽然这题题目是线段树练习,但是明显有单点更新,区间求和的特征,所以树状数组也能做,至于思路就不赘述了,不懂树状数组可以看我前面几篇相关的题解。#include#includeint n, m;int a[100010];int lowbit(int x){ return x & (

2013-07-11 20:03:28 1810

原创 prim算法模版

#include#define INF 0xffffff#define M 1000using namespace std;double dis[M], map[M][M];bool flag[M];int prim(int s, int n) //s为起点,n为点的个数{ int i, j, k, temp, md, total =

2013-06-24 09:32:27 715

原创 Wiki OI 1004 四子连棋

题目链接:http://wikioi.com/problem/1004/算法与思路:广搜+Hash详见注释。#include#include#include#includeusing namespace std;const int dx[]={1, -1, 0, 0}; //初始化可移动的方向 const int dy[]={0, 0,

2013-06-05 21:38:15 2245

原创 Wiki OI 1026 逃跑的拉尔夫

其实算不得原创,改动了下方便阅读而已,搜索这块实在有待加强;附上原文链接http://blog.csdn.net/u010126535/article/details/8939394;题目链接:http://wikioi.com/problem/1026/算法与思路:深搜按照给定的转向信息的顺序,从起点开始搜索,每个方向都要走到无法继续前进的状态,在每个状态又搜索下一个

2013-06-05 10:47:40 2772

原创 Wiki OI 1099 字串变换

题目链接:http://wikioi.com/problem/1099/算法与思路:双向广搜所谓双向搜索指的是搜索沿两个方向同时进行:正向搜索:从初始结点向目标结点方向搜索;逆向搜索:从目标结点向初始结点方向搜索;当两个方向的搜索生成同一子结点时终止此搜索过程。详见注释。#include#includestruct node{ char s[30];

2013-06-04 20:30:45 2182

原创 Wiki OI 1295 N皇后问题

题目链接:http://wikioi.com/problem/1295/算法与思路:一行一行放置,保证一行只有一个皇后,在行确定的基础上遍历列,直到找到可行解,然后退回x-1行状态,重复以上遍历,详见注释#include#includeint n; int sum = 0; int pos[15];//pos的下标为行号,值为列号 int judge(int x)

2013-06-03 20:28:00 1357

原创 Wiki OI 1077 多源最短路

题目链接:http://wikioi.com/problem/1077/算法与思路:全裸floyd。#include#include#includeusing namespace std;int main(){ int n, t, a[105][105]; int x, y; memset(a, 0, sizeof(a)); scanf("%d", &n); for

2013-05-29 21:13:16 1492

原创 Wiki OI 1014 装箱问题

题目链接:http://wikioi.com/problem/1014/算法与思路:01背包转移方程为dp[i][j]=max{dp[i-1][j],dp[i-1][j-cost[i]]+w[i]}表示考虑第i件物品,容量为j时,有两种策略,第一种是不选该物品,第二种为选择该物品,在这两种策略中选择一个最优策略#include#includeint v, n;int dp[2

2013-05-26 22:31:17 1794

原创 Wiki OI 1220 数字三角形

题目链接:http://wikioi.com/problem/1220/算法与思路:棋盘型动态规划状态转移方程DP[i][j]= {DP[i][j] + max(DP[i + 1][j] , DP[i+1][j+1])}, 程序从最底层开始向上dp,最后输出DP[1][1]即可。#include int dp[101][101];int Max(int x, int y){

2013-05-16 21:43:34 1140

原创 Wiki OI 1048 石子归并

题目链接:http://wikioi.com/problem/1048/算法与思路:尽管是比较简单的dp,推出动态转移方程还得卡实现,毕竟是菜鸟啊。dp[i][j] = min(dp[i][k]  + dp[k + 1][j] + s[j] - s[i - 1]) k属于[i, j];dp的过程中边界很重要,在输入阶段维护一个sum[i]数组表示前i项的石子

2013-05-16 18:49:57 1692

原创 Wiki OI 1044 拦截导弹

题目链接:http://wikioi.com/problem/1044/算法与思路:依次遍历整个序列,每一次求出从第一个数到当前这个数的最长上升子序列,直至遍历到最后一个数字为止,然后再取dp数组里最大的那个即为整个序列的最长上升子序列。我们用dp[i]来存放序列1-i的最长上升子序列的长度,那么dp[i]=max(dp[j])+1,(j∈[1, i-1]); 显然dp[1]=

2013-05-14 19:58:58 2815 2

原创 Kruskal算法模板

克鲁斯卡尔(Kruskal)算法(只与边相关)算法描述:克鲁斯卡尔算法需要对图的边进行访问,所以克鲁斯卡尔算法的时间复杂度只和边又关系,可以证明其时间复杂度为O(eloge)。算法过程:1.将图各边按照权值进行排序2.将图遍历一次,找出权值最小的边,(条件:此次找出的边不能和已加入最小生成树集合的边构成环),若符合条件,则加入最小生成树的集合中。不符合条件则继续遍历图,寻找下一

2013-04-16 20:48:22 896

转载 快速幂取模算法

本文转载自 yyf573462811 的CSDN博客所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余)。在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快、计算范围更大的算法,产生了快速幂取模算法。我们先从简单的例子入手:求a ^ b % c = ?算法1.首先直接地来设计这个算法:int ans = 1;for(in

2013-04-02 11:41:11 733

原创 Poj 3067 Japan

题目链接:http://poj.org/problem?id=3067题目大意:输入K组数据,每组包含两个整数,分别代表东西海岸的城市的编号,表示连接对应编号的城市形成的路线,输出这K条路线的交点数,每个交点只由2条路线交叉而成;思路:将线路数据存入结构体数组line中,将其按x升序排列,若x相同,则按y升序;利用sum函数统计当前线路左边(左边指排序后小于当前元素的一方)y值小于

2013-03-30 01:27:20 915

原创 Poj 2352 Stars

题目链接:http://poj.org/problem?id=2352题目大意:输入n个星星的坐标,数据按y升序输入,星星的level值等于x,y都不大于该星星的星星个数,level不大于32000,要求输出[0,n]等级的星星数;思路:简单的树状数组题,因为输入数据已经按y升序排列,所以星星的等级等于在它之前所有x坐标不大于它的星星个数,用树状数组实现,调用level函数

2013-03-30 00:59:18 607

原创 Poj 2155 Matrix

题目链接:http://poj.org/problem?id=2155题目大意:给定一个n*n的01矩阵,初始时所有元素为0;若输入‘C’,输入两个坐标(x1,y1),(x2,y2),分别代表取反区域的左上角和右下角坐标,将取反区域内0值转为1,1值转为0;若输入‘Q’,输出输入坐标指向的矩阵元素的值;思路:二维树状数组,操作与一维数组类似,注意a[i][j]储存的是取反的

2013-03-30 00:51:04 590

原创 Hdu 1166 敌兵布阵

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166思路:简单树状数组;对于刚接触树状数组的同学,推荐详解链接http://dongxicheng.org/structure/binary_indexed_tree/代码实现:#include#includeint n;int a[55555];c

2013-03-30 00:38:56 637

21点游戏MFC程序设计 c++课程设计

21点游戏MFC课程设计,包含项目文件(源码)和报告文档,即下即用

2014-06-21

数据结构课程设计 校园最短路

数据结构课程设计,c语言编写,包含源码和报告文档

2014-06-21

2048游戏 Java面向对象课程设计

2048游戏Java版,课程设计,界面美观,包含项目文件和报告文档,即下即用

2014-06-21

MFC课程设计 21点游戏

21点游戏课程设计 包含项目文件和报告文档,即下即用。

2014-06-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除