- 博客(38)
- 资源 (1)
- 收藏
- 关注
转载 树的三种存储结构(详细基础)
6.2树的定义之前我们一直在谈的是一对一的线性结构,可现实中,还有很多一对多的情况需要处理,所以我们需要研究这种一对多的数据结构----"树",考虑它的各种特性,来解决我们在编程中碰到的相关问题。树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>...
2019-06-21 10:53:14 25594 5
转载 OpenJudge_P4979 海贼王之伟大航路(状态压缩DP)(易懂)
描述 “我是要成为海贼王的男人!”,路飞一边喊着这样的口号,一边和他的伙伴们一起踏上了伟大航路的艰险历程。 路飞他们伟大航路行程的起点是罗格镇,终点是拉夫德鲁(那里藏匿着“唯一的大秘宝”——ONE PIECE)。而航程中间,则是各式各样的岛屿。 因为伟大航路上的气候十分异常,所以来往任意两个岛屿之间的时间差别很大,从A岛到B岛可能需要1天,而从B岛到A岛则可能需要1年。当然,任意两个岛之间...
2019-06-20 21:53:28 243
转载 ACM竞赛对拍程序的写法原理及源代码(可直接用)
出处:http://blog.csdn.net/wlx65003/article/details/51149196搞程序设计竞赛的同学很多时候都会因为WA但苦苦找不到错误数据而苦恼,虽然肉眼debug的能力也很重要,但有的时候一直手打数据测试两三天也没有必要。这里就介绍一种对拍程序的写法,是我改进过的,自认为效率应该是比较高了。如果你懒得学实现细节了,想直接使用,那么下面的内容可以略过了...
2019-06-19 10:33:34 498
原创 五大常用算法之一:分治算法
分治算法一、基本概念在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……任何一个可以用计算机求解的问题所需的计算时间都与其规模有关...
2019-06-18 20:58:55 37585 2
转载 c++输入输出重定向
这个对经常在OJ上做题的童鞋们很有用。OJ基本都是用标准输入输出(USACO除外)。但如果你在调试的时候也都是从控制台输入,那就太浪费宝贵的时间了。我们可以重定向标准输入,调试的时候从文件读,提交时从标准输入读。在C语言中,方法比较简单。使用函数freopen():[cpp] view plaincopyprint?freopen(“data.in”,“r”,stdin);freopen(...
2019-06-18 14:54:15 628
原创 八数码问题(bfs单向搜索+编码排列)
#include <bitset>#include <cstring>#include <iostream>using namespace std;int goalStatus;bitset<362800> Flags;const int MAXS = 400000;char result[MAXS];struct Node{...
2019-06-17 16:37:27 284
转载 bitset详解c++
basisbitset 的构造bitset的操作一些高级用法将Bitsets视为一组标志 一些简单的原子操作,往往能组合出复杂而强大的功能。位操作的深远意义不在于表示一种数值,而是可能的情况数。我虽然暂时不知道bitset能组合出如何复杂的功能,但冥冥之中却有这样的直觉感受。basisbitset所在的头文件<bitset>命名空间stdbits...
2019-06-17 16:02:28 11252
原创 算法复习之搜索(bfs)
广度优先搜索先生成的节点先扩展逐层往下扩展(可记录steps)需要储存空间大勿忘记忆如何表示状态?用合适编码表示状态,减少储存代价——状压编码有时候是正常的数的进制表示相应的状态,有时候则需要进行:排列到序号,序号到排列的转换常用的给定排列求序号:思想:算出有多少个排列比给定排列小具体来讲,就是分别算,1-a放在这一位有多少排列,即(a-1)*...
2019-06-17 15:52:47 179 7
原创 算法复习之搜索(dfs)
枚举 Vs. 搜索– 枚举逐一判断所有可能的方案是否为问题的解;– 搜索: : 高级枚举有顺序有策略地枚举状态空间中的结点,寻找问题的解搜索: 复杂的, 高级的枚举 枚举: 解空间中的每个元素是一个 动作的 集合 F 将初态S 0 另一个状态F(S 0 ) F中 各动作的执行顺序不影响F(S 0 ) 如果F(S 0 )是符合要求的S*, 那么F是真解, 否则是伪...
2019-06-16 21:20:28 185
原创 算法复习之动规(细思之一)
为什么动态规划?——树形递归存在冗余计算dp是求解包含重叠子问题的最优化方法基本思想:将原问题分解为相似子问题求解过程通过保存子问题的解求出原问题的解(不是简单的分而治之)只能应用于有最优子结构的问题(即局部最优解能决定全局最优解,或问题能分解成子问题来求解)动态规划 = 记忆化搜索递归转化为动规的一般转化方法递归函数有n个参数,就定义一个n维数组数组的下标是递归函数...
2019-06-16 15:23:53 207
原创 算法复习之递归(多样化)
递归求解过程:划分成许多相同性质的子问题小问题易解子问题解构成原问题解总体思想:待求问题的解——输入变量x的函数f(x)寻找g(), s.t. f(x) = g(f(x - 1))已知f(0),结合g(), 求出f(x)的值推广:扩展到多个输入变量x - 1 推广到 x - x1只要朝着“出口”方向即可与枚举的区别都是划分子问题,并且依次求解,但是,枚举...
2019-06-15 22:08:45 240
原创 算法复习之枚举(并不是非常简单)
基于已有知识进行答案猜测:没有公式可以直接计算,只能尝试例如:判断N是否是复数——转化为求小于N的所有复数枚举的思想 :猜测从可能的集合中一一列举各元素,对问题可能解集合的每一项进行检验,判定条件是否成立注意:猜测的结果必须是没有出现过的要及早排除错误答案三个关键问题:给出解空间,建立简洁的数学模型——模型中的变量尽可能少,之间相互独立减少搜索的空间,利用知识缩小变量取值范...
2019-06-15 20:10:19 419
原创 十大经典排序算法(原理+代码+动图+比较分析)
0、算法概述0.1 算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。0.2 算法复杂度0.3 相关概念稳定:如果a原本在b前面,而a=b,排序...
2019-06-14 20:22:03 174
转载 agent与搜索(人工智能学习笔记)
版权声明:转载请注明出处 https://blog.csdn.net/qq_37205708/article/details/86556326 </div> <link rel="styl...
2019-06-09 14:09:39 4822
转载 关于信息增益(information gain)
当我们需要对一个随机事件的概率分布进行预测时,我们的预测应当满足全部已知的条件,而对未知的情况不要做任何主观假设。在这种情况下,概率分布最均匀,预测的风险最小。因为这时概率分布的信息熵最大,所以称之为“最大熵法”。最大熵法在数学形式上很漂亮,但是实现起来比较复杂,但把它运用于金融领域的诱惑也比较大,比如说决定股票涨落的因素可能有几十甚至上百种,而最大熵方法恰恰能找到一个同时满足成千上万种不同条件的...
2019-06-08 22:20:59 6824 2
原创 unimodal_palindromic——回文串dp动规
#include <iostream>using namespace std;const int N = 250;long long divide[N][N]; // 数字比较大,别人用的int——64??void computer () // 计算i的所有分解中,最大的分解数小于j的分解方法数{ for (int i = 0; i < N; i++) ...
2019-06-02 10:36:41 149
原创 课程大作业——dp动规及详细注释
#include <algorithm>#include <cmath>#include <cstdio>#include <iostream>#include <string.h>#include <string>using namespace std;const int MAX = 1 << 16...
2019-06-02 10:32:20 576
原创 滑雪问题----dfs
#include <iostream># include <cstring>using namespace std;int high[110][110];int s[110][110];int visited[110][110];int dx[4] = {0, 1, -1, 0};int dy[4] = {1, 0, 0, -1};int tryskiing...
2019-06-02 10:29:16 318
转载 状压dp入门
状压dp入门状压dp的含义在我们解决动态规划题目的时候,dp数组最重要的一维就是保存状态信息,但是有些题目它的具有dp的特性,并且状态较多,如果直接保存的可能需要三维甚至多维数组,这样在题目允许的内存下势必是开不下的,那么我们能不能想个办法,把它压缩成一维呢?对,二进制.一般的动规题目数据范围都不会太大,那么就可以把几个状态全部压缩成一个二进制数保存下来,这样就大大节省了空间,来允许我们进行其...
2019-06-02 10:28:56 111
原创 文件结构图-----递归及详细注释
#include <iostream>#include <set>using namespace std;int group = 1; // now groupint nowlayer = 0;bool havebeginprint;bool stopscan = false;void print(){ if (havebeginprint == f...
2019-06-01 10:58:34 634
原创 硬币——dp及详细注释
#include <algorithm>#include <cstring>#include <iostream>using namespace std;int cointypes; int goal;int coins[110];int nowcanfull[100000]; // 当前去掉某个硬币后可以拼成的面值bool oncefull[...
2019-06-01 10:57:29 344
原创 棋盘问题——深搜
# include <iostream># include <algorithm># include <cstring>using namespace std;char board[10][10];int conce[10];int all = 0;int r;int dx[4] = {0, 1, 0, -1};int dy[4] = {-1,...
2019-06-01 10:56:47 190
原创 openjudge蛋糕——dfs
# include <iostream># include <cmath>using namespace std;int nv;int nlayer;int s = 10000;int h1;int r1;int mins = 0;void dfs(int nowh, int nowr, int leftlayer, int leftv){ if...
2019-06-01 10:56:08 222
原创 最佳加法表达式及详细注释—---dp
#include <iostream>#include <string>using namespace std; string myadd(string a, string b) { string result; int a_len = a.length(); int b_len = b.l...
2019-06-01 10:55:07 237
原创 Charm Bracelet一维数组背包
# include <iostream>using namespace std;int a[12881] = {0};//前i个构成w的最大价值 = max{前i-1个构成w-wi的最大价值+vi , 前i-1个构成w} int w[3410] = {0};int v[3410] = {0};int main (){ int n, m; cin >> ...
2019-06-01 10:35:25 165
原创 抓住那头牛——bfs
include include using namespace std;struct point{int x;int steps;point(int a, int b):x(a), steps(b){}};int main(){int visited[100010] = {0};int n, k;cin >> n >> k;point p(n...
2019-06-01 10:29:44 271
原创 怪盗基德的滑翔翼——bfs+枚举
include using namespace std;int main(){int n;cin >> n;while(n–){int t;int h[10010];cin >> t;int mmax = 0;for (int i = 0; i < t; i++){cin >> h[i];}for (int i = 0; i...
2019-06-01 10:28:57 885
转载 0-1背包的一维数组解法及数组分析
核心思想:for i:=1 to N dofor j=V downto c[i] doif f[j-c[i]]+w[i]>f[j] thenf[j]=f[j-c[i]]+w[i];背包问题九讲-P01 0-1背包问题在讲背包问题的时候老师说这是一个老鸟中的老鸟总结的,很全面也很简洁易懂,在此把内容贴上来,供大家一起交流学习。感谢原作者!题目有N件物品和一个容量为V的背包。第i...
2019-06-01 10:19:09 406
转载 动态规划dp数组的运用
动态规划是通过找当前项和前一或几项或后一或几项的关系,从而对一个数组多次利用达到减少复杂度。1.当一串数可以不限次利用时,采用顺序的方式循环:for(j=0;j<=max_n;j++)(一维数组)或者加一个for(k=0;k*A[i]<=j;k++)(二维数组)2.当一串数的使用次数有限时用for(k=0;k*A[i]<=j&&k<=B[i];k++)(...
2019-06-01 10:15:00 5298
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人