
算法相关
沙雕出现了
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
《算法竞赛入门经典》————竖式问题
题目: 找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但你的程序应该输出空格,而非小数点)。 样例输入:2357 样例输出: <1> ..775 X..33 ...原创 2019-01-30 21:58:29 · 3151 阅读 · 1 评论 -
算法竞赛入门经典——生成元
生成元 digit generator uva1583 #include<iostream> #include<cstring> using namespace std; #define max 100010 int a[max];//a[y]=x该数组就是输入y,得到的是y的最小生成元 int main(){ int i,x,y=0,n; memset(a,0,...原创 2019-01-31 18:16:10 · 806 阅读 · 0 评论 -
【贪心】Fence Repair
#include<iostream> using namespace std; const int MAX_N = 20001; int N,L[MAX_N]; int main() { long long sum = 0; cin>>N; for(int i=0;i<=N-1;i++) cin>>L[i]; while(N>1) /...原创 2019-10-19 19:39:16 · 340 阅读 · 1 评论 -
快速排序
#include<iostream> #include<cstdio> #include<cstdlib> using namespace std; const int M = 1000000; int r[M]; int partition (int *r,int low,int high) //返回中间元素的位置,函数做到将序列分成左右两部分 { ...原创 2019-10-19 15:49:34 · 157 阅读 · 0 评论 -
归并排序
#include<iostream> #include<cstdio> #include<cstdlib> using namespace std; const int M = 100; int s[M]; void merge(int *s,int low,int high,int mid); void mergesort(int *s,int low,...原创 2019-10-17 14:34:18 · 117 阅读 · 0 评论 -
二分搜索
输入一个数组,输入要查找的值,进行二分搜索,这里使用递归,时间复杂度为O(logn) #include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; const int M = 1000000; int s[M]; in...原创 2019-10-16 17:36:44 · 102 阅读 · 0 评论 -
【贪心】——Saruman's Army(POJ 3069)
题目链接:http://poj.org/problem?id=3069 题目思路:以最左边的点为圆心,往右边找半径R内最远的点,并做标记。 接着,以当前的点为圆心,往右边找超过半径的第一个点,把这个点视作起点(因为它不需要管左边区域) 也就是当前点为最左边的点了,重复以上步骤。 #include<iostrea...原创 2019-07-28 19:12:01 · 141 阅读 · 0 评论 -
best cow line题解(已AC)——贪心
题目链接:这是POJ的 这是洛谷的(扩大了N的范围) 题目大意:emmm不用说了叭 题目思路:大致思路就是,比较字符串s的首末字母,哪个小选哪个,如果相等,则进入一个函数check。 check函数主要是比较遇到首尾相等的情形,继续去比较里面的字符串大小,从而决定从哪边开始截取, check返回值为1,则...原创 2019-07-27 15:53:22 · 248 阅读 · 0 评论 -
区间调度问题——贪心算法
题目大意: 有n项工作,每项工作分别在si开始,ti结束。对每项工作,你都可以选择参加或不参加,但选择了参加某项工作就必须至始至终参加全程参与,即参与工作的时间段不能有重叠(即使开始的时间和结束的时间重叠都不行)。 限制条件: 1<=n<=100000 1<=si<=ti,=109 样例: 输入 n=5 s={1,2,4,6,8} T={3,5,7,9,1...原创 2019-07-25 22:12:56 · 449 阅读 · 0 评论 -
迷宫最短路径问题——宽度优先搜索
何谓宽度优先搜索(bfs)? 宽度优先搜索总是先搜索距离初始状态近的状态。开始状态--->只需1次转移就可以到达的所有状态--->只需2次转移就可以到达的所有状态......这样的顺序进行搜索。对于同一个状态,宽度优先搜索只经过一次,因此复杂度为O(状态数x转移的方式)。 宽度优先搜索利用了队列,搜索时先将初始状态添加到队列,然后从次队列最前端不断取出状态,把从该状态可以转移到的状...原创 2019-07-25 19:12:45 · 1279 阅读 · 0 评论 -
Lake Counting(poj no.2386)——深度优先搜索
题目链接 :http://poj.org/problem?id=2386 题目大意:计算出一共有多少块水洼 解决方法:从任意的w开始,不停地把邻接的部分用 ‘ . ’ 代替,一次 dfs 之后与这个w连接的所有w就都被替换成了 ‘ . ’ ,因此知道图中不再存在W为止,总共进行的 dfs 的次数就是答案了。 复杂度:由于8个方向对应了8种状态转移,每个格子作为dfs参数至多被调...原创 2019-07-24 20:44:13 · 294 阅读 · 0 评论 -
部分和问题——一个简单的DFS
一、什么是DFS(深度优先搜索)? 它从某个状态开始,不断地转移状态直到无法转移,然后回退到前一步的状态,继续转移到其他状态,如此不断重复,直到找到最终的解。根据深度优先搜索的特点,采用递归函数实现比较简单。 dfs基本模型: void dfs(int step) { 判断边界 if( 找到解 || 走不下去了 ) { ... return; } 继续下一步 ...原创 2019-07-20 04:03:54 · 446 阅读 · 0 评论 -
蓝桥杯基础练习 查找整数 告别循环查找 将位置存入数组
此方法是一个很厉害的学长教我的,思想是把位置保存在数组中,下面贴出代码。 #include<stdio.h> int main(){ int n,x[10000]={0},i,a,num=0,m;//初始化数组每个数为0 scanf("%d",&n);//数组里面一共n个数 for(i=0;i<n;i++){ scanf("%d",&m);/...原创 2019-01-26 23:52:09 · 215 阅读 · 0 评论