Day 1(冯哲)

今天的内容很杂但却都是基础知识

主要分为下面几个点

枚举

枚举也称作穷举,指的是从问题所有可能的解的集合中一一枚举各元素。用题目中给定的检验条件判定哪些是无用的,哪些是有用的。能使命题成立的即为其解。
有几个非常非常简单的例题:

这个题目类似于洛谷P1046 陶陶摘苹果

下放代码(不行不行太水了):

#include<iostream>
#include<cstdio>
using namespace std;
int n,x,ans,s[101];
int main()
{cin>>n>>x;for(int i=1;i<=n;i++){cin>>s[i];if(x>=s[i]){ans++;}}cout<<ans;
}
/*
//洛谷题解qwq
#include<iostream>
using namespace std;
int n,s[10],ans;
int main()
{for(int i=0;i<10;i++)cin>>s[i];cin>>n;for(int i=0;i<10;i++)if(n>=s[i]-30)ans++;cout<<ans;
}
*/

还有就是有关素数判定最laji的方法

#include<iostream>
using namespace std;
int main()
{int m;cin>>m;for(int i=2;i*i<=m;i++){if(m%i==0){cout<<"合数";return 0; }}cout<<"素数";
}

没错,就是辣么的简单qwq【当然又双叒叕讲了筛法】

是个正常人都知道用哪个啊

还有就是有关枚举的优缺点:

优点:

  • 简单明了,分析直观
  • 能够帮助我们更好地理解问题
  • 运用良好的枚举技巧可以使问题变得更简单

缺点

  • 时空间效率低
  • 往往没有利用题目中的特殊性质
  • 产生了大量冗余状态

搜索

本质上是一种枚举,搜索算法一般做一些普通的枚举不方便表达状态的情况 。

例题:

给出一个N*N的迷宫,求从起点出发,不经过障碍物到达终点的最短距离

解决这类问题一般有两种方式
1.深度优先搜索(DFS【大法师】)
2.广度优先搜索(BFS【笨法师】)

前置知识:

栈:后进先出的数据结构
支持的操作:
加入一个数
删除最晚加入的数
查询最晚加入的数
实现:一个数组+一个用于指向栈顶位置的变量
系统内部递归即使用了栈
例如求斐波那契数列的第n项 :

队列:先进先出的数据结构
支持的操作:
加入一个数
删除最早加入的数
查询最早加入的数
实现:一个数组+头下标+尾下标

DFS的做法图解:

     (a)              (b)          (c)

       (d)         

DFS:

优点:

  • 占用空间小(只需要记录从起点到当前点的路径)
  • 代码短

缺点:

  • 获得的不一定是最优解
  • 在图上路径非常多的时候,复杂度可能会达到指数级别

BFS的做法图解:

     (a)          (b)          (c)

    (d)           (e)          

BFS:

优点:

  • 找到答案时找到的一定是最优解
  • 复杂度不会超过图的大小

缺点:

  • 需要维护一个“当前箭头的集合”
  • 空间较大

BFS与DFS的区别:

  • DFS:能走就走,走不了才回头(比较决绝)
  • BFS:我全都要(要不是笨法师呢qwq)

应用:

G = (V , E)被称为一张图,则其包含两部分:
1.点集|V | = n,即有n个点,标号分别为1, 2, ..., n
2.边集|E| = m,有m条边(ui, vi),表示第ui个点和第vi个点有一条边相连.
边有向边和无向边之分,(u, v)是无向边,则u能直接走到v,v能直接走到u.

还有就是存图的问题:

有这么几种方法:

  1. 邻接矩阵存储,用A[x][y] = 0/1表示.优点是便于加删,但是需要O(N^2)的空间.
  2. 直接用vector存下所有的边(邻接表法).优点是空间和访问比较快,缺点是删除比较麻烦.
  3. 之前发的链式前向星

图的连通块

在本课中我们基本只考虑无向图.

a沿着边走可以到b,则称ab在同一个连通块中,称ab连通.

显然ab连通,bc连通,则ac肯定连通.

一张图可以被分成若干个两两连通的块.

这里就只放一个例题吧:

八数码游戏

八数码游戏是一种非常无聊的游戏。给定一个3*3的格子,在其中8个格子中放置整数1 ∼ 8,

剩下一个格子空着(用0表示)。每次操作时,你可以选择将某个与空格相邻的数字移动到空

格上。给定一个初始局面,求最少需要多少次操作才能将局面变成
1 2 3
4 5 6
7 8 0

状态?0 ∼ 8 的一个排列
转移?一步能够到达的其他排列
BFS or DFS? BFS

按照这个思路,我们就能很好的得出答案:考虑倒着进行游戏过程。所有状态都是由

最终状态转移得到的因此我们以最终态为起点做一遍BFS即可预处理出所有状态的答案

贪心

每一步都取当前的最优解的思想;一般来说符合直观思路;
需要严格的证明;OI中使用多个错误的贪心策略进行加成有时会有良好的效果

例一

给定N个农民,第i个农民有Ai单位的牛奶,单价Pi

现在要求从每个农民手中购买不超过Ai单位,总共M单位的牛奶。

求最小花费
(洛谷P1208 [USACO1.3]混合牛奶 Mixing Milk)

#include<bits/stdc++.h>using namespace std;#define N 5001
#define cmp zhx_ak_ioi//神仙保佑int n,m,i,sum;struct node
{int x,y;
}a[N];inline int cmp(node g,node c)
{if(g.x!=c.x){return g.x<c.x;}else {return g.y>c.y;}
}int main()
{cin>>m>>n;for(i=1;i<=n;i++){cin>>a[i].x>>a[i].y;}sort(a+1,a+n+1,cmp);i=1;while(m){if(a[i].y){a[i].y--;sum+=a[i].x;m--;}else{i++;}}cout<<sum;
} 

二分

给定一个单调的函数/数组;给定一个值,求这个值是否存在;
或者找到这个值应当存在的位置

由于数组有序,不妨认为他单调递增
假设Ai > x,则必然有∀j > i, Aj > x
假设Aj < x,则必然有∀j < i, Aj < x
二分的原理就是每次在待定区间中选择mid。
必然可以确定一边是没有意义的。每次问题的规模缩小 12
因此复杂度为O(logN)

顾名思义,就是对答案进行二分
对于某些要求“满足某条件的最小值”类的问题,对答案进
行二分,假设答案不超过mid,则问题变为“满足某条件且
某值不超过mid”的判定性问题。
常用于最大值最小化类问题。
在二分答案之后往往需要一个贪心策略。

相对来说理解起来就简单了

分治

思想:将一个问题划分成若干个(一般都是分成俩)子问题分别解决每个子问题后(也可能是前,还可能一前一后之类的)
将各个子问题组合起来得到原问题的答案。

这里经典的就是快速幂了

归并排序

基本思想:先将整个数组分成两个部分,分别将两个部分排
好序,然后将两个排好序的数组O(n)合并成一个数组。
我们将问题分为两个阶段:分、治

分:

对于每个长度> 1的区间,拆成两个[l, mid]区间和[mid + 1, r]区间
直接递归下去

治:

我们认为在处理区间[l,r]时,已经有[l,mid]和[mid+1,r]内分别有序

这一次的操作就是合并两个有序序列,成为一个新的长有序序列

用两个指针分别指向左右分别走到哪了即可

有关题目的链接:

搜索:
8数码 http://poj.org/problem?id=1077
走迷宫 http://poj.org/problem?id=3984
推箱子 http://acm.hdu.edu.cn/showproblem.php?pid=1254

贪心:
纪念品分组 洛谷P1094
例四:http://codeforces.com/contest/954/problem/E
例五:http://codeforces.com/contest/898/problem/D

二分:
跳石子:NOIP往年题,自行查找题库
例三 http://codeforces.com/contest/954/problem/G
三分 http://codeforces.com/contest/939/problem/E

分治:
平面最近点对:http://acm.hdu.edu.cn/showproblem.php?pid=1007
例二:http://codeforces.com/contest/768/problem/B
例一:http://codeforces.com/contest/97/problem/B

转载于:https://www.cnblogs.com/gongcheng456/p/10783616.html

清北学堂培训2019.4.28相关推荐

  1. 清北学堂培训2019.4.4

    第一次培训,心情有点激动(尽管没了清明节),还见到了各地的dalao们,十分开森 Day 1(李昊dalao) 上午篇 上午呢,主要讲了关于高精,快速幂,膜模意义下的运算,筛素数,费马小定理以及欧拉定 ...

  2. 清北学堂培训2019.4.7

    Day 4(没错,又是他→钟皓曦) 上午,考了个试(悲惨爆零[好像是多加了几个文件夹]) 下午是题目讲解和概率期望的知识(貌似网上好像能搜到他的课件) 这里也没什么奇特的,主要是一些定义的知识(这里采 ...

  3. 清北学堂(2019 4 28 ) part 1

    今天主要用来铺路,打基础 枚举 没什么具体算法讲究,但要考虑更优的暴力枚举方法,例如回文质数,有以下几种思路: 1.挨个枚举自然数,再一起判断是否是回文数和质数,然而一看就不是最优 2.先枚举质数再判 ...

  4. 清北学堂培训2019.4.6

    Day 3(还是我们熟悉的钟皓曦大佬) 讲了神奇的组合数问题(据说各个网站的组合数问题都是钟皓曦出的,所以他说都是好题) 组合数需要用到下面两个原理和两个神奇的东西 加法原理:具有性质A的事件有m个, ...

  5. 清北学堂培训2019.4.29

    Day 2(冯哲) 今天的内容主要分为一下几部分 二叉搜索树 二叉搜索树(BST)是用有根二叉树来存储的一种数据结构,在二叉树中每个节点代表一个数据. 每个节点包含一个指向父亲的指针,和两个指向儿子的 ...

  6. 7月清北学堂培训 Day 5

    今天是钟皓曦老师的讲授~ 动态规划 动态规划的三种实现方法: 1.递推: 2.递归: 3.记忆化: 举个例子: 斐波那契数列:0,1,1,2,3,5,8-- Fn = Fn-1 + Fn-2 1.我们 ...

  7. 8月清北学堂培训 Day4

    今天上午是赵和旭老师的讲授~ 概率与期望 dp 概率 某个事件 A 发生的可能性的大小,称之为事件 A 的概率,记作 P ( A ) . 假设某事的所有可能结果有 n 种,每种结果都是等概率,事件 A ...

  8. 五一清北学堂培训之Day 3之DP

    今天又是长者给我们讲小学题目的一天 长者的讲台上又是布满了冰红茶的一天 ---------------------------------------------------------------- ...

  9. 7月清北学堂培训 Day 1

    基础算法 1. 模拟算法 面向测试算法 模拟算法的关键就是将人类语言翻译成机器语言. 要做到以下两点: 1.优秀的读题能力: 2.优秀的代码能力: 程序流程图: 读入,循环处理指令,输出: 读题是很重 ...

最新文章

  1. Lifecycle Activity和Fragment生命周期感知组件 LifecycleObserver MD
  2. 【GANs入门】pytorch-GANs任务迁移-单个目标(数字的生成)
  3. centos mate桌面_CentOS 7安装桌面汇总
  4. 信息系统项目管理案例2
  5. 权益证明协议中的拜占庭容错
  6. python用pip安装pygame_安装pygame和pip的问题以及过程
  7. Linux之父:开源不为金钱名利只为娱乐
  8. C语言编译和链接详解(通俗易懂,深入本质)
  9. python输入数字是什么类型的游戏_“数字炸弹”——一个练习Python基础知识的小游戏...
  10. C++之继承探究(十二):子类的构造、析构和赋值运算符重载
  11. Win8 64位安装Oracle 11g时错
  12. TypeError: tensor is not a torch image.
  13. 某项目的双代号网络图如下所示_系统集成项目管理工程师5天备考第3天第1-2学时...
  14. Nginx作为静态资源服务器
  15. matlab ctradon函数,Radon变换入门matlab CT原理
  16. 专访架构师周爱民:谈企业软件架构设计
  17. 深入浅出IO流知识——基础流
  18. SEH X64(2)
  19. vysor技术实现原理(投屏不包括鼠标控制)
  20. 【Hello Linux】Linux入门

热门文章

  1. 爬虫第四课:猫眼电影
  2. 整理Glide方法使用含义(毛玻璃效果,实现圆角等)
  3. CIO应具备的基本素质要求(zt)
  4. Win10中Pro/E鼠标滚轮不能缩放该怎么办?
  5. 为什么说在数字角频率中:π附近的频率分量就是高频分量?
  6. 【嵌入式开发】手把手教你4418/6818开发板屏幕修改 本文转自迅为: http://www.topeetboard.com 开发平台:iTOP-4418/6818开发板 44186818屏幕
  7. 1.5 极限运算法则
  8. 青龙整合傻妞机器人实现QQ聊天短信登录
  9. rime|小狼毫 敏感词过滤效果
  10. (python 作业)线性回归预测房价