- 博客(37)
- 收藏
- 关注
原创 10099 - The Tourist Guide
题目大意:找出从起点到终点路径最小边的最大值这题有一个陷阱,假设最大值为max,则每次运输的人数只能为max-1,因为每次导游要包含在运输人数里思路:贪心+最大生成树kruskal算法每次找最大的一条边,如果这条边连接了两棵不同的树,则合并这两棵树,直到起点与终点联通,则当前边的值即为最小边的最大值kruskal算法代码如下:(AC)#inclu
2016-08-30 21:35:03 363
原创 10034 Freckles
题目大意:给你n个点的坐标,任意两个点都可以相连让你找出最小生成树的总边长思路:最小生成树问题 prim or kruskal代码:prim算法(AC)#include#include#include#include#include#includeusing namespace std;struct vertex {
2016-08-30 16:41:18 229
原创 STL容器之优先队列
参考:拼装小火车要学会如何定义最小优先队列、最大优先队列对于自己定义的结构体,如何定义最小、最大优先队列核心://定义比较结构struct cmp1{ bool operator ()(int &a,int &b){ return a>b;//最小值优先 }};struct cmp2{ bool operator ()(i
2016-08-30 14:51:15 206
原创 c&c++ error
8.30今天写程序的时候产生了一个这样的错误error:no type named iterator_category in struct错误代码类似下面:#include #include #include using namespace std; struct vertex{ int x, y;}Point;double distance(cons
2016-08-30 14:44:15 410
原创 576-Risk
题目大意:一个棋盘类的战争游戏。棋盘上有很多国家,求从一个国家到另一个国家的最短距离输入:1-19行,第i行的第一个数x表示有x个国家与国家i相邻,后面的x个数表示的是与i相邻的国家 要注意如果ij相邻则ji也是相邻的 本质是一个无向图 输出:对于每个给定的起点和终点,输出最短路径思路:有权无向图(无负权)求
2016-08-30 10:39:59 326
原创 排序算法
关键词:插入冒泡选择、希尔归并快排、堆排序倒着讲1.堆排序1.1有关堆与优先队列,看这里堆与优先队列1.2堆排序的思想: 最大堆,每次把根从堆中取出来删去,然后从新建堆,并把取出来的元素放到数组的最后 那么最大的元素被放到n-1的位置,第二大的元素被放到n-2的位置。。。直到最后,数组就变成的由小到大的顺序 1.3算法复杂度 最好最差平均
2016-08-27 11:00:54 420
原创 堆与优先队列
1.针对的问题:很快的找出最大的元素(最大堆)、很快的找出最小的元素(最小堆) 它不适用于从一堆数中检索某一个数 如何去定义一个堆?抓住两点: 完全二叉树、任何一个内部结点的值大于等于其子节点的值 一个堆一定是完全二叉树的形式:节约空间、可以很方便的用数组表示 最大堆:根大于等于任何一个子节点(堆
2016-08-27 10:06:55 384
原创 判断图中是否存在环
参考博客:xwdreamer的专栏1.对于无向图,有以下三种方法剪枝、无环连通分支边数m1.1剪枝1删除所有度数为0的点2把所有度数为1的点入队3.从队列中取出一个点,删除这个点,并且所有与这个点相关联的点的度数都减14.重复步骤2、3直到队列为空如果还有为被删除的点,说明存在环1.2无环连通分支边数m通过BFS,DFS可以得到图的连
2016-08-26 17:11:08 2436
原创 单源最短路径算法
1.单源最短路径以及Dijsktra算法2.多源最短路径以及Floyd算法1.1单源最短路径:即从一个特定的点出发,寻找这个点到其他点的最短路径对于一个无权图,BFS算法就可以了。但是对于加权图,BFS行不通1.2 Dijkstra(迪杰斯特拉):针对加权有向图、单源最短路径dijkstra通过一个简单的动态规划思想来求最短路径。(假设求从点s出的的单源
2016-08-26 15:40:24 3330
原创 最小生成树
1.MST(Minimum spanning tree)A minimum spanning tree is a spanning tree of a connected,undirected graph.It connects all the verticals together with the minimum total weighting for it's edges.最小生
2016-08-26 14:08:26 370
原创 108 - Maximum Sum
原题地址108-MaximunSum大意:求矩阵最大连续和。是对一维序列最大连续和问题的扩展,具体参考思路:将二维转化为一维,枚举所有行的情况代码如下:结果:AC#include#include#includeusing namespace std;int n;int a[105][105];int sum[105][105];int main(){
2016-08-22 20:06:02 237
原创 qsort的使用
原地址CPlusPlusfunctionqsortvoid qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*));Sort elements of arraySorts the num elem
2016-08-21 15:42:17 256
原创 简单图+Havel_Hakimi定理
1.什么是简单图:没有平行边和自环什么是平行边?对于无向图,如果两个点之间有一条以上的边,则这些边是平行边; 对于有向图,如果一个点指向另一个点的边多于一条,则这些边是平行边什么是自环?边的两个端点是同一个点2.度序列一个由图的各个点的度数组成的序列3.Havel_Hakimi定理:用于判断一个度序列能否转换成一个简单图流程:度序列按
2016-08-21 15:24:38 1047
原创 10720 - Graph Construction
题意:给你一个度数序列,让你判定该序列能否表示一个图思路:Havel_Hakimi定理参考:http://blog.csdn.net/shuangde800/article/details/7857246代码:#includeusing namespace std;int n;int arr[10000];int cmp(c
2016-08-21 15:08:03 485
原创 101 - The Blocks Problem
题目大意:给你n个数字0~n-1初始,数字i在位置i上有如下四种操作:move a onto b:把a、b上面的所有数字移动回原来的位置,再把a移动到b上move a over b: 把a上的数字移动回数字原来的位置,再把a移动到含有b的堆的上方pile a onto b: 把b上的数字移动回原来的位置,把含有a的堆移动到b上(a原本上面的数字顺序不变)p
2016-08-19 06:39:38 211
原创 碎碎念_天天更
8.181.有一个变量作为while循环的条件时,如while(size>0),那么这个变量的更新应该在循环体的最后。 如果更新完size后,循环体还有语句没有执行,则应该先判断一下此时是否已经到达循环结束的调节,如果是,用break结束循环。 for同理。 最好不要再循环体的中间变更条件变量,如果变更了一定要及时检查。2.if语句,循环语句都是比较耗费时间的
2016-08-18 09:07:27 399
原创 133 - The Dole Queued
原题大意:编号1-N的N个人由1开始逆时针站成一个环。从第一个人开始逆时针数K个人;再从第N个人开始顺时针数M个人,第K、M出队。如果KM是同一个人,只出队一次。从K逆时针下一个人、N顺时针下一个人开始,重复上述步骤。直到队列为空。思路:关键字:数据结构两种实现方式:双向链表 环形数组
2016-08-18 07:00:04 214
原创 657 - The die is cast
这题就是递归套用递归先递归搜索骰子,如果在骰子里面发现了点,在对该点递归,同时更新点数。代码如下:#include#include using namespace std;char pic[60][200];int visit[60][200];int cnt[100];int col, row;//对骰子上的点递归void dfs_dot(int x, i
2016-08-17 14:38:56 191
原创 784 - Maze Exploration
思路:从*所在的位置出发,dfs历遍所有与它联通的点并将其变为#dfs实现关键思路在于两点:1.哪些点是与当前点联通的2.dfs返回条件代码如下:#includeusing namespace std;char maze[35][90];int visit[35][90];int r;//the row of mazevoid DFS(int ro
2016-08-17 13:29:36 219
原创 572 - Oil Deposits
一道基础的图的历遍的题。思路是由一个v[][]标记当前位置是否被visit过,g[][]存储当前是否为pocket每次DFS历遍一块deposit主程序扫描g[][],没发现一块没有被visit过的pocket,就调用DFS以它为起点历遍它代码如下:#includeusing namespace std;char g[110][110];int vis[
2016-08-17 11:01:53 209
原创 10562 - Undraw the Trees
参考博客:http://blog.csdn.net/goomaple/article/details/7818170自己的代码实现:#includeusing namespace std;char Tree[210][210];void DFS(int r, int c) { cout << Tree[r][c]; //输出前导左括号 cout << "(
2016-08-17 08:00:58 199
原创 112 - Tree Summing
BackgroundLISP was one of the earliest high-level programming languages and, with FORTRAN, is one of the oldest languages currently being used. Lists, which are the fundamental data structures in LI
2016-08-16 09:27:45 316
原创 二叉树
本文包含以下内容:一.二叉树的一些基本概念二.两条定理三.二叉树的层次历遍四.二叉树的数组实现和链表实现五.二叉检索树六.总结一.二叉树的基本概念二叉树:一个点的集合,这个集合要么为空,要么包含一个根节点和两个子二叉树祖先和子孙:如果一条路径从结点R至M,那么R是M的祖先,M是R的子孙深度、高度、层数:R至M路径长度为L,则至M的深度为L,高度为L+
2016-08-15 18:22:02 900
原创 vs2015
1.变量名一改全改选着你要修改的变量名,按下ctr+f,图下图所示(此处我选的是top)2.在下面的方框里填下你想更改的名称(我填写的是length)b->c表示改一个, ab->ac表示全部都更改点击ab->ac即可
2016-08-15 10:23:26 239
原创 线性表--顺序表及链表
本文包含以下内容:一、线性表的介绍以及抽象ADT二、顺序表及顺序表的实现三、链表及链表的实现四、顺序表和链表的比较五、总结参考书目:《数据结构与算法分析》【美】Clifford A.Shaffer著一、线性表的介绍以及抽象ADT1.什么是线性表?关键字:线性、有序、有限。所谓线性,是一个元素接着一个元素,就像一条线那样排放。而不是离散散乱的,
2016-08-15 07:24:53 1557
原创 409 - Excuses, Excuses!
本文包含以下内容:一、思路二、代码实现三、总结一、思路本题主要考察字符串的输入输出、匹配对于K,E,scanf读取,getchar接收\nkeywords和excuses都需要被存起来,因为keywords要用于查找匹配,excuse最后输出 中要用到,可以考虑char型的二维数组进行存储一个keyword一行,中间无空格无特殊符号,因此可以用scanf或者
2016-08-13 20:24:44 274
原创 537 - Artificial Intelligence?
一.思路二.代码三.总结一.思路本题关键是字符串读入提取的问题,一开始我觉得用getchar一个一个读然后判断的话,如果读到等号等号前面的字符没有办法得到了用gets一次性读入一行字符的话还是要一个一个判断于是想着用scanf,每次读入一个单词判断一下这个单词里有没有等号但是实际上用scanf读反而会是程度读起来更复杂。因为用scanf读入后还是要一
2016-08-13 15:24:14 323
原创 10010where is waldorf
本文包含以下内容:一.思路二.代码三.总结一.思路字符串搜索问题。因为原题中说了“A word matches a straight, uninterrupted line of letters in the grid.”(一个单词匹配网格中的一条直的、不间断的线)因为有这句话,使搜索策略变得非常简单:从上至下,从左至右历遍grid,如果发现一个字符与w
2016-08-13 09:50:00 220
原创 10361 - Automatic Poetry
本文包含以下内容:一.思路二.程序三.总结一.思路本题考查的关键是对字符串的读取和输出的问题。要注意以下几点:1.如果是用scanf读取一个数字n,其后要用一个getchar读取残存在缓冲区的换行符。 如果是用cin读取则不必。因为cin会丢弃使其输入停止的\n,而scanf不会2.接下来是如何读取s1 s2 s3 s4 s5的问题
2016-08-13 06:45:26 402
原创 字符串输入小结
本文包含对一下几种字符串输入方式的小结:1. '\0' '\n'2.getchar()3.gets_s()4.scanf5.cin cin.get() cin.getline()6.freopen_s()1.'\0'是字符串的结束字符,没有结束字符的字符串是不能被正常输出的,后面会输出千奇百怪的内容 '\n'表示回车符
2016-08-12 20:38:21 277
原创 10003木棍切割问题
原题详见UVa10003本文主要包含一下内容:1.数学模型的建立2.递推伪代码的推导3.程序实现4.总结关键字: 动态规划 集合1.数学模型的建立很多人解不出这道题从根本上是没有读懂题意。我们现在来从头分析一下。已知:木棍的长度给定为L,切割点数给定为n,而且每个切割点的位置也是固定的。每次切割的花费等于被切割的木棍的长度。要求:最少
2016-08-11 20:51:34 3397 1
原创 116单向TSP
(原题详见UVa116)本文主要包含以下内容:1.数学模型的建立2.递推伪代码的推导3.代码实现4.总结关键字:动态规划1.数学模型的建立这是一道典型的动态规划题目。定义d[i][j]表示在矩阵i,j处是最小和。那么d[i][j]可能由三种状态转移而来d[i-1][j-1] d[i][j-1] d[i+1][j-1]状态转移方程
2016-08-11 20:20:27 330
原创 10131越大越聪明
(原题详见UVa10131)本文主要包含以下内容:1.数学模型的建立2.递推伪代码3.具体实现代码4.总结关键字:动态规划 DAG1.数学模型的建立本题用基于DAG的动态规划的思想很好解决。而且属于起点终点不固定的DAG.(具体可以参考《算法竞赛入门》中动态规划一章,矩形嵌套问题)把每只大象视作一个个点,点i,j连通的条件是w[i]s[
2016-08-11 19:53:21 653 1
原创 10066双塔
双塔问题实际上就是在两个字符串中寻找最大公共子字符串。借由双塔问题来具体理解分析一下最大公共子字符串问题。本文包含以下内容1.数学模型的建立2.递推伪代码3.具体程序1.数学模型的建立我们可以想象有两根指针i、j,分别指向数组a,数组b的起始位置。如果当前两根指针指向的字符是相同的,我们可以把两根指针同时向后移动一位,同时公共子字符串的数目增加1.
2016-08-11 19:19:04 321
原创 完全背包----两个for循环的先后问题
这篇文章主要是讲完全背包问题中,什么情况下两个for循环的位置不能交换。在点击打开链接(完全背包问题----思想的理解)中我们提到,完全背包一维数组的实现的两个for循环是可以交换顺序的。伪代码分别如下所示:方式一:《背包九讲》基于01背包问题推导出来的,还记得和01背包一维数组实现的区别吗?f[0] =0;for i:1->n do for
2016-08-10 21:21:29 1898
原创 完全背包问题----思想的理解
最近学习动态规划,在背包问题处被卡了很久,故在此处把这几天的遇到的问题和自己的理解进行一下总结。这篇博文主要介绍的是完全背包的思想,包括它的三种状态转移方程。作为引入完全背包问题的前提,附带的介绍了DAG思想和01背包问题。参考资料有《算法竞赛入门经典》和《背包九讲》。1.在《算法竞赛入门经典》中,其对完全背包问题是通过DAG的思想来讨论的。先讨论了完全背包问题,再推广
2016-08-10 19:42:48 3225
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人