问题 B: 例题4-2 比较交换实数值 [命题人 : 外部导入] 时间限制 : 1.000 sec 内存限制 : 12 MB 题目描述 从键盘输入2个实数,按照代数值由小到大的顺序输出这两个数. 输入 用空格分隔的两个实数. 输出 从小到大输出这两个实数,中间以空格来分隔,小数在前,大数在后. 小数点后保留2位小数. 末尾输出换行符. 样例输入 Copy 3.6 -2.3 样例输出 Copy -2.30 3.60 #include<stdio.h> #define Max(a,b)((a) &…
问题 C: 例题4-3 比较交换3个实数值,并按序输出 [命题人 : 外部导入] 时间限制 : 1.000 sec 内存限制 : 12 MB 题目描述 从键盘输入3个实数a, b, c,通过比较交换,将最小值存储在变量a中,最大值存储在变量c中,中间值存储在变量b中,并按照从小到大的顺序输出这三个数a, b, c. 末尾输出换行. 输入 输入以空格分隔的三个实数 输出 按照从小到大的顺序输出这三个实数,中间以空格分隔,最小值在前,最大值在后.小数点后保留2位小数. 注意末尾的换行. 样例输入 C…
问题 A: 例题4-1 一元二次方程求根 [命题人 : 外部导入] 时间限制 : 1.000 sec 内存限制 : 12 MB 题目描述 求一元二次方程ax2+bx+c=0的根,三个系数a, b, c由键盘输入,且a不能为0,但不保证b2-4ac>0. 程序中所涉及的变量均为double类型. 输入 以空格分隔的一元二次方程的三个系数,双精度double类型 输出 分行输出两个根如下(注意末尾的换行): r1=第一个根 r2=第二个根 结果输出时,宽度占7位,其中小数部分2位. 如果方程无实根,…
问题 D: 习题4-4 三个整数求最大值 [命题人 : 外部导入] 时间限制 : 1.000 sec 内存限制 : 12 MB 题目描述 有3个整数a, b, c,由键盘输入,输出其中最大的数. 输入 以空格分割的三个整数. 输出 三个数中的最大值,末尾换行. 样例输入 Copy 1 3 2 样例输出 Copy 3 #include <stdio.h> int compare(int a, int b, int c) { if (a > b) if (a > c) return a…
算法笔记 这个博客写的不错:http://blog.csdn.net/wust_zzwh/article/details/52100392 数位dp的精髓是不同情况下sta变量的设置. 模板: ]; ll dp[][state];//不同题目状态不同 ll dfs(int pos,/*state变量*/,bool lead/*前导零*/,bool limit/*数位上界变量*/)//不是每个题都要判断前导零 { //递归边界,既然是按位枚举,最低位是0,那么pos==-1说明这个数我枚举完了 )…
算法笔记 模板: vector<int>g[N]; vector<int>edge[N]; ][N]; int deep[N]; int h[N]; void dfs(int o,int u,int w) { ,h[u]=h[o]+w; ;j<g[u].size();j++) { if(g[u][j]!=o) { anc[][g[u][j]]=u; ;i<;i++)anc[i][g[u][j]]=anc[i-][anc[i-][g[u][j]]]; dfs(u,g[u]…
算法笔记 参考资料:https://wenku.baidu.com/view/25540742a8956bec0975e3a8.html sg函数大神详解:http://blog.csdn.net/luomingjun12315/article/details/45555495 sg[i]定义,从i走一步能到达的j的sg[j]以外的最小值,那么从sg函数值为x的状态出发,我们能转移到sg值为0,1,...,x-1的状态 对于某个人来说,0是他的必败态,sg[0] = 0 我们从这个状态出发,用d…
最近把算法竞赛入门经典的前半部分看完了,开始看算法笔记入门算法. 看了前半部分的例题,很多是算法竞赛入门经典中出现过的,但是感觉这本书写的更适合初学者,而且真的很像考试笔记,通俗易懂. //日期问题 #include <iostream> using namespace std; const int month[13][2] = //第二维:0:非闰年,1:闰年 { {0, 0}, //方便取 {31,31}, //1 {28,29}, //2 {31,31}, //3 {30,30}, //…
Java排序一,冒泡排序! 刚刚开始学习Java,但是比较有兴趣研究算法.最近看了一本算法笔记,刚开始只是打算随便看看,但是发现这本书非常不错,尤其是对排序算法,以及哈希函数的一些解释,让我非常的感兴趣,就记录一下自己的学习总结! 排序:将一些无序的元素按照某种规则排列的过程就叫"排序".在生活中,有时候可能是一些少量的数据 ,,,但是 ,也有可能是 一些的大数据 .排序是非常基础和重要的算法,有着广泛的理论基础和实践需求.(加粗部分摘自<算法笔记>原话!:-D) 一个排序…
算法笔记 map: map<string,int> m; map<string,int>::iterator it;//auto it it = m.begin(); while(it != m.end()) { //it->first; //it->second; it ++; } set: multiset<int>ss; multiset<int>::iterator it=ss.begin();//auto it,multiset元素可以…
算法笔记 priority_queue<int>que;//默认大顶堆 或者写作:priority_queue<int,vector<int>,less<int>>//less表示其他元素都比堆顶小 小顶堆:priority_queue<int,vector<int>,greater<int>>//greater表示其他元素都比堆顶大 less和greater容易混淆!!!…
开始系统学习算法,希望自己能够坚持下去,期间会把常用到的算法写进此博客,便于以后复习,同时希望能够给初学者提供一定的帮助,手敲难免存在错误,欢迎评论指正,共同学习.博客也可能会引用别人写的代码,如有引用,定会注明.本博客内容主要按照算法笔记内容进行学习.(2018-12-03) 1.万能头文件 #include<bits/stdc++.h> using namespace std;int main(){ ... return 0;} 2.判断素数 int IsPrime(int n){ ;i&…
目录 1 问题描述 2 解决方案   1 问题描述 问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计划除去P条道路中尽可能多的道路,但是还要保持牧场之间 的连通性.你首先要决定那些道路是需要保留的N-1条道路.第j条双向道路连接了牧场Sj和Ej(1 <= Sj <= N; 1 <= Ej <= N; Sj != Ej),而且走完它需要Lj的时间.没有两个牧场是被一…
算法笔记(c++)--回文 #include<iostream> #include<algorithm> #include<vector> using namespace std; int main() { std::string s; ]; ,start,last; ],m=; getline(cin,s); //这里的temp保存了原字符值在原字符串的位置,可以借鉴下 ;i<s.length();i++) if(isalpha(s[i])) { temp[m]…
算法笔记(c++)--完全背包和多重背包问题 完全背包 完全背包不同于01背包-完全背包里面的东西数量无限 假设现在有5种物品重量为5,4,3,2,1  价值为1,2,3,4,5  背包容量为10 #include <iostream> #include<algorithm> using namespace std; int main() { ; ] = { ,,,,,}; ] = { ,,,,,}; ] = { }; ; i <= ; i++) ;j++) dp[j] =…
算法笔记(c++)--关于01背包的滚动数组 关于01背包问题:基本方法我这篇写过了. https://www.cnblogs.com/DJC-BLOG/p/9416799.html 但是这里数组是N^2,据说滚动数组可以用1维来代替二维. 我想了想也没想通.干脆老方法,一步步列出来就懂了. 先上下滚动数组的代码,然后分析代码: dp[N];//这里只用一维的 ; i<=n; i++)//对每个数判断,可反 { for(int j=m; j>=weight[i]; j--)/ dp[j]=ma…
算法笔记(c++)--经典01背包问题 算法解释起来太抽象了.也不是很好理解,最好的办法就是一步步写出来. 背包问题的核心在于m[i][j]=max(m[i-1][j],m[i-1][j-w[i]]+v[i])这个公式理解起来还是有点麻烦的特别我这种脑子笨的人.所以我先上段代码,然后那数据一步步分析就行了. 先上代码:代码稍微看看就行了,关键我下面的解释,走一遍就懂了. #include <iostream> #include<algorithm> using namespace…
算法笔记(c++)--c++中碰到的一些用法 toupper(xxx)可以变成大写; tolower(xx)小写 isalpha(xxx)判断是不是字母 isalnum(xx)判断是不是数字 abs(xxx)绝对值 为了防止空格问题想要读取一行字符串可以用 getline()函数 string.substr(pos,len)获取从pos位置开始的后len长度的字符串 string.find("xx")获取xx第一次出现的位置  要是没找到返回-1 string.substr(pos)就…
算法笔记(c++)--求一个数的所有质数因子 先贴题目: 这题不难,恶心在理解上面.最后看评论知道了怎么回事: 2*2*3*3*5=180 按照这逻辑的话应该输入的数由一系列质数相乘出来,所以每次找到一个质数就要更新下输入数.. 问题1: 没问题的话一瞬间都是这么想的.更新后重新来一遍for.重新探索一遍质数.但是仔细想想,题目要求从小到大,能2*3*2就一定能2*2*3,不如每次找到一个质数因子的时候,循环更新输入数. 解决如下 while(num%质数因子==0) num=num/质数因子.…
算法笔记(c++)--桶排序 记得题目是排序,输入n个1-1000的数字然后去重然后排序. 桶排序没毛病 #include<iostream> using namespace std; int main() { int N,n; cin>>N; ]=; while(N--) { cin>>n; a[n]=; } ; } 这样输入的同时就排序好了,到时候 if(a[i]==1) cout<<a[i] 就可以打印出排序好的内容了…
算法笔记(c++)--使用一个辅助栈排列另一个栈 仅仅使用一个辅助栈,不使用其他数据结构来排列一个栈,要求,上大下小. 分析下.肯定是先吧主栈中的数据都放到辅助栈中,在辅助栈中上小下大. 1.首先循环提取主栈中的top,如果辅助栈为空就直接放进去,如果比辅助栈顶小也直接放进去,如果比辅助栈顶大就把辅助站中元素一个个弹到主栈中,直到找到比栈顶小或者栈为空就放进去. 代码如下: #include<iostream> #include<queue> #include<string&…
kNN算法笔记 标签(空格分隔): 机器学习 kNN是什么 kNN算法是k-NearestNeighbor算法,也就是k邻近算法.是监督学习的一种.所谓监督学习就是有训练数据,训练数据有label标好(也就是分类分好的).kNN的思路是,对于需要测试的数据,把它和训练集中的每个数据都进行距离计算,距离最近的前k个结果中,所对应的label出现次数最多的,就是这个测试数据所属的label(类别). kNN一般步骤 按照<machine learning in action>一书中的通用步骤走一遍…
目录 1 问题描述 2 解决方案 1 问题描述 输入两个整数n和sum,要求从数列1,2,3,...,n中随意取出几个数,使得它们的和等于sum,请将其中所有可能的组合列出来. 2 解决方案 上述问题是典型的背包问题的应用,即先找出n个数的所有组合,再在这些组合中寻找组合数相加之和等于sum的组合,并依次输出这些组合中的数. 具体代码如下: package com.liuzhen.array_2; public class ManySumN { /* * 函数功能:以字符串形式返回1~n个数的所…
目录 1 问题描述 2 解决方案 2.1 基于减治法实现 2.2 基于深度优先查找实现 1 问题描述 给定一个有向图,求取此图的拓扑排序序列. 那么,何为拓扑排序? 定义:将有向图中的顶点以线性方式进行排序.即对于任何连接自顶点u到顶点v的有向边uv,在最后的排序结果中,顶点u总是在顶点v的前面. 2 解决方案 2.1 基于减治法实现 实现原理:不断地做这样一件事,在余下的有向图中求取一个源(source)(PS:定义入度为0的顶点为有向图的源),它是一个没有输入边的顶点,然后把它和所有从它出发…
目录 1 问题描述 2 解决方案 2.1 蛮力法 2.2 减治法 2.2.1 Johson-Trotter算法 2.2.2 基于字典序的算法   1 问题描述 何为旅行商问题?按照非专业的说法,这个问题要求找出一条n个给定的城市间的最短路径,使我们在回到触发的城市之前,对每个城市都只访问一次.这样该问题就可以表述为求一个图的最短哈密顿回路的问题.(哈密顿回路:定义为一个对图的每个顶点都只穿越一次的回路) 很容易看出来,哈密顿回路也可以定义为n+1个相邻顶点v1,v2,v3,...,vn,v1的一…
目录 1 问题描述 2 解决方案   1 问题描述 问题描述 在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数.求把所有石子合并成一堆的最小花费. 输入格式 输入第一行包含一个整数n,表示石子的堆数. 接下来一行,包含n个整数,按顺序给出每堆石子的大小 . 输出格式 输出一个整数,表示合并的最小花费. 样例输入 51 2 3 4 5 样例输出 33 数据规模和约定 1<=n<=1000, 每堆石子至少1颗,最多1000…
目录 1 问题描述 2 解决方案 2.1 floyd算法解决 2.2 spfa算法解决   1 问题描述 问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环).请你计算从1号点到其他点的最短路(顶点从1到n编号). 输入格式 第一行两个整数n, m. 接下来的m行,每行有三个整数u, v, l,表示u到v有一条长度为l的边. 输出格式 共n-1行,第i行表示1号点到i+1号点的最短路. 样例输入 3 31 2 -12 3 -13 1 2 样例输出 -1-2 数据规模…
目录 1 问题描述 2 解决方案 2.1 具体编码   1 问题描述 何为spfa(Shortest Path Faster Algorithm)算法? spfa算法功能:给定一个加权连通图,选取一个顶点,称为起点,求取起点到其它所有顶点之间的最短距离,其显著特点是可以求含负权图的单源最短路径,且效率较高.(PS:引用自百度百科:spfa是求单源最短路径的一种算法,它还有一个重要的功能是判负环(在差分约束系统中会得以体现),在Bellman-ford算法的基础上加上一个队列优化,减少了冗余的松弛…
VSLAM研究了几十年,新的东西不是很多,三维重建的VSLAM方法可以用一篇文章总结一下. 此文是一个好的视觉SLAM综述,对视觉SLAM总结比较全面,是SLAM那本书的很好的补充.介绍了基于滤波器的方法.基于前后端的方法.且介绍了几个SensorFusion方法,总结比较全面.并且文中给出了代码的下载链接,比较方便. 原文链接:Visual SLAM算法笔记 摘抄部分,如有不适,请联系删除或者移步原文链接 一.Visual-Inertial Odometry算法笔记 名字缩写太多,我有点凌乱了…
论文名称:CornerNet-Lite: Efficient Keypoint Based Object Detection 论文链接:https://arxiv.org/abs/1904.08900 代码链接:https://github.com/princeton-vl/CornerNet-Lite 简介 该论文与Cornernet论文作者相同,都是由普林斯顿大学的几位学者提出.截止2019年4月份,CornerNet-Lite 应该是目标检测(Object Detection)中速度和精度…