算法相关
沙雕出现了
这个作者很懒,什么都没留下…
展开
-
《算法竞赛入门经典》————竖式问题
题目:找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但你的程序应该输出空格,而非小数点)。样例输入:2357样例输出:<1>..775X..33...原创 2019-01-30 21:58:29 · 2952 阅读 · 1 评论 -
算法竞赛入门经典——生成元
生成元 digit generator uva1583#include<iostream>#include<cstring>using namespace std;#define max 100010int a[max];//a[y]=x该数组就是输入y,得到的是y的最小生成元 int main(){ int i,x,y=0,n; memset(a,0,...原创 2019-01-31 18:16:10 · 763 阅读 · 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 · 303 阅读 · 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 · 130 阅读 · 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 · 95 阅读 · 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 · 77 阅读 · 0 评论 -
【贪心】——Saruman's Army(POJ 3069)
题目链接:http://poj.org/problem?id=3069题目思路:以最左边的点为圆心,往右边找半径R内最远的点,并做标记。 接着,以当前的点为圆心,往右边找超过半径的第一个点,把这个点视作起点(因为它不需要管左边区域) 也就是当前点为最左边的点了,重复以上步骤。#include<iostrea...原创 2019-07-28 19:12:01 · 109 阅读 · 0 评论 -
best cow line题解(已AC)——贪心
题目链接:这是POJ的 这是洛谷的(扩大了N的范围)题目大意:emmm不用说了叭题目思路:大致思路就是,比较字符串s的首末字母,哪个小选哪个,如果相等,则进入一个函数check。 check函数主要是比较遇到首尾相等的情形,继续去比较里面的字符串大小,从而决定从哪边开始截取, check返回值为1,则...原创 2019-07-27 15:53:22 · 215 阅读 · 0 评论 -
区间调度问题——贪心算法
题目大意:有n项工作,每项工作分别在si开始,ti结束。对每项工作,你都可以选择参加或不参加,但选择了参加某项工作就必须至始至终参加全程参与,即参与工作的时间段不能有重叠(即使开始的时间和结束的时间重叠都不行)。限制条件:1<=n<=1000001<=si<=ti,=109样例:输入n=5s={1,2,4,6,8}T={3,5,7,9,1...原创 2019-07-25 22:12:56 · 395 阅读 · 0 评论 -
迷宫最短路径问题——宽度优先搜索
何谓宽度优先搜索(bfs)?宽度优先搜索总是先搜索距离初始状态近的状态。开始状态--->只需1次转移就可以到达的所有状态--->只需2次转移就可以到达的所有状态......这样的顺序进行搜索。对于同一个状态,宽度优先搜索只经过一次,因此复杂度为O(状态数x转移的方式)。宽度优先搜索利用了队列,搜索时先将初始状态添加到队列,然后从次队列最前端不断取出状态,把从该状态可以转移到的状...原创 2019-07-25 19:12:45 · 1215 阅读 · 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 · 260 阅读 · 0 评论 -
部分和问题——一个简单的DFS
一、什么是DFS(深度优先搜索)? 它从某个状态开始,不断地转移状态直到无法转移,然后回退到前一步的状态,继续转移到其他状态,如此不断重复,直到找到最终的解。根据深度优先搜索的特点,采用递归函数实现比较简单。dfs基本模型:void dfs(int step){ 判断边界 if( 找到解 || 走不下去了 ) { ... return; } 继续下一步 ...原创 2019-07-20 04:03:54 · 329 阅读 · 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 · 184 阅读 · 0 评论