蓝桥杯_c++_算法
记录准备蓝桥杯c++组学习的一些算法。
:)zx
这个作者很懒,什么都没留下…
展开
-
dfs全排列
//输入1~9之间的数,输出全排列#include<iostream>using namespace std;int n,book[11],array[11];void dfs(int step){ if(step==n+1) { for(int i=1;i<=n;i++) { printf("%d",array[i]); } printf("\n"); return; } for(int i=1;i<=n;i++) { if(原创 2022-04-08 23:32:47 · 227 阅读 · 0 评论 -
暴力搜索解决日期问题
//闰年的2月为29天,非闰年为28天 #include<iostream>#include<stdio.h>using namespace std;int max_days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//判断年月日是否合法 bool check(int year,int month,int day){ if(month==0||month>12)return false; if(day==.原创 2022-04-08 14:30:03 · 212 阅读 · 0 评论 -
acwing1209-带分数
100 可以表示为带分数的形式:100=3+69258714还可以表示为:100=82+3546197注意特征:带分数中,数字 1∼9分别出现且只出现一次(不包含 0)。类似这样的带分数,100有 11种表示法。输入格式一个正整数。输出格式输出输入数字用数码 1∼9不重复不遗漏地组成带分数表示的全部种数。数据范围1≤N<106思路:暴力枚举出9个数的全排列,然后用一个长度为9的数组保存全排列的结果从全排列的结果中用两重循环暴力分解出三段,每段代表一个数验证枚举出来的三个原创 2022-02-26 17:30:31 · 212 阅读 · 1 评论 -
01递归与递推
递归实现指数型枚举从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。输入格式输入一个整数 n。输出格式每行输出一种方案。同一行内的数必须升序排列,相邻两个数用恰好 1 个空格隔开。对于没有选任何数的方案,输出空行。本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。数据范围1≤n≤15#include<iostream>#include<cstdio>#include<cstring>using namespace原创 2022-02-23 13:23:09 · 96 阅读 · 0 评论 -
一些套路及经验,建议
根据题目n的范围选择合适的算法,以上是y总的经验。2.scanf,printf.特点:代码稍微长一点 但是速度巨快。cin,cout特点:代码短点,速度稍慢。当输入/输出数据量较大(>=10^5)最好用scanf,printf.反之用cin,cout.ps:如果想用printf scanf这些C语言中的东西,最好包含头文件cstdio以免编译器报错。...原创 2022-02-22 21:52:28 · 341 阅读 · 0 评论 -
蓝桥杯必备知识点
蓝桥杯省赛知识点1、C++ STL 常见算法2、C++ 输入输出(包括流、文件)3、C++常用泛型:list vector stack map4、暴力穷举5、递归6、全排列 next_permutation 康托展开式7、回溯8、DFS、BFS、hash表9、数学上的有:辗转相除(两行内),素数等国赛知识点1、hash表2、大数(高精度)加减乘除3、线段树4、并查集5、图论相关算法:最短路(Floyd、Dijstra,BellmanFord)、最小生成树(prim,krusca转载 2022-02-11 11:55:17 · 4677 阅读 · 0 评论 -
蓝桥杯-DFS&枚举-古堡算式
//DFS#include<stdio.h>int book[6], a[6], total = 0;void dfs(int step){ int left, right; left = a[1] * 10000 + a[2] * 1000 + a[3] * 100 + a[4] * 10 + a[5]; right = a[5] * 10000 + a[4] * 1000 + a[3] * 100 + a[2] * 10 + a[1]; if (step == 6) {.原创 2022-02-06 00:56:28 · 368 阅读 · 0 评论 -
深度优先搜索-迷宫
使用DFS方法求得最短路径,起点为(1,1),终点为(p,q),空地用0表示,障碍物用1表示,迷宫长宽不超过50。思路:dfs。创建一个数组存储迷宫,再创建一个数组标记已走过的地方,再创建一个数组代表每次走上/下/左/右。void dfs(int x,int y,step){if();dfs(step+1);return;}dfs,边界判断条件是是否走到终点,dfs函数的功能是解决当前应该怎么办#include<stdio.h>int p, q, n, m, minste原创 2022-02-08 18:29:02 · 561 阅读 · 0 评论