蓝桥杯算法入门_22 (基础算法概念)

搜索

普及搜索
DFS BFS IDDFS
剪枝 记忆化搜索

对搜索情况的描述叫做状态
搜索树概念 , 状态取节点
DFS一条路走到黑,走到末端回退 遍历所有路径
模板:
例题 :
①选数 从n个整数选k个数相加 ,结果为素数的有多少种
用DFS : 确定搜索目标,确定搜索对象
②枚举子集 给n个数组,选择任意个数,请输出所有方案
③油滴扩展

剪枝:
①多层式生日蛋糕 - 表面积最小
剪枝1 :没上一层的半径一定 <=下层 - 1
剪枝2 :ans大于之前的面积时,直接停止当前循环,判断下一种情况
②数字三角形 : 1 - n 的排列 a[i] ,每次相邻的两个数相加,构成新的序列,(每次新序列长度比之前的少1,直到只剩下一个数字)
输入一个数,还原最初排列a[i],要求输出字典序最小的那一个
dfs(x + 1,y + i * c[n - 1][x - 1])

***小扩展:跑程序 DOS命令 空间 - 任务管理器.进程 差值为占用空间为多少MB
BFS
①01迷宫

数据结构 – 提高组 (暂时略 – 蓝桥杯省一 冲国赛必备)
单调栈,单调队列
优先队列
差分和前缀和
并查集
线段树
树状数组

单调栈,单调队列
额外维护栈内元素的单调性

#include <iostream>
using namespace std;
//自己实现  输入123456 输出全排列  ,只能输数字哦,代码过于简陋... 
#include<cstring>
char a_[100];
int my_all_sort(){
	gets(a_); //输入的各种bug 用if先解决  
	int len = strlen(a_);
	for(int n = 0;n < len;n++){
		for(int i = 0;i < len;i++){
			printf("%d",a_[(i + n)%len] - '0' );
		}
		printf("\n");
		
	}
	return 0;
}

提高组的基础算法

二分
贪心
分治
枚举
高精度
快速幂
存储结构 二进制 补码表示

例题(简要理论分析)

P1843 晒衣服 (优先队列) -水分最多先吹
每件衣服有x[i]的水分 ,每分钟挥发A水分,用吹风机的每分钟多挥发B,求所有衣服最短烘干时间
P2678 跳石头 (二分答案)
有n个点 ,选择m个点删除 ,使得最短两点间距离的最大值
P2759 使得达到 xx 或超过n位数字的最小正整数 x 是多少 (高精度不能直接算) – (二分答案)
等效 xx <= 10^n - 1^ ,取对数 (n - 1次方 是因为 103 为1000 – 4位)
xlgx >= n - 1
cmath库:
log(x)
log10(x)
//如log2(1024) = 10 / log10(100) = 2
P4393 给n个点的一个数列,每次可以合并两个相邻的数为他们的最大值,代价为这两个数的最大值,求合并为1个数的最小代价
合并(n - 1)次 ,小的数先合并
P2882 (English) 有n头牛,4种朝向,每次可以连续k头牛翻转,求k为多少时可以用最少的步骤将所有的牛朝向变为正向

#include<cstdio>
#include<cmath>
int main() {
	my_all_sort();
	return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值