Day01

Day1 (2021.1.30)

1.如何准备蓝桥杯

①调试的能力

②刷题量

2.做题套路

算法题:①模型少 ②思维难度较高 ③实践

题目描述 ---> 抽象出考察的模型(平时多刷题)

1)如何判断时间是否会超

对于C++来说,1秒种大概可以运行10^8次 (小于10^7 -10^8 ,一秒钟肯定能运行出来)

2)由数据范围反推算法复杂度以及算法内容

时间复杂度

https://www.acwing.com/blog/content/32/

3.递归:自己调用自己

斐波那契数列:1, 2, 3, 5, 8, 13, 21, 55, ……

f(n) = f(n - 1) + f(n - 2) n >= 3

scanf,printf 速度非常快(数据规模>=10^5 );cin,cout速度稍微慢一点(数据规模<10^5 );

理解递归的方式:所有递归都可以画一颗递归搜索树

#include<iostream> //cin,cout
#include<cstring> //memset
#include<csdio> //scanf,printf
int f(int n) {
    if(n == 1) {
        return 1;
    }
    if(n == 2) {
        return 2;
    }
    return f(n - 1) + f(n - 2);
}
int main() {
    int n;
    scanf("%d", &n);
    printf("%d", f(n));
    return 0;

}

1)Acwing 92题 递归实现指数型枚举

n = 15, 大致2^n 或者n*2^n 时间复杂度

递归很重要的就是顺序,将所有的情况不重不漏的排列。

顺序:从1-n一次考虑每个数选或不选、

#include<iostream> //cin,cout
#include<cstring> //memset
#include<cstdio> //scanf,printf
#include<algorithm>
using namespace std;
const int N = 15;
int n;
int st[N]; //状态,记录每个位置的状态:0表示还没有考虑,1表示选,2表示不选
void dfs(int u) {
    if(u > n) {
        for(int i = 1; i <= n; i++) {
            if(st[i] == 1) {
                printf("%d ", i);
            }
        }
        printf("\n");
        return;
    }
    st[u] = 2;
    dfs(u + 1);//左边分支,不选
    st[u] = 0; //恢复现场

    st[u] = 1;
    dfs(u + 1);//右边分支,选
    st[u] = 0;
}
int main() {
    int n;
    scanf("%d", &n);
    dfs(1);
    return 0;
}
#include<iostream>
#include<cstring>
#include<cstdio> 
#include<algorithm>
#include<vector>

using namespace std;

const int N = 15;

int n;
int st[N]; 
vector<vector<int>> ways;

void dfs(int u) {
    if(u > n) {
        vector<int> way;
        for(int i = 1; i <= n; i++) 
            if(st[i] == 1)
                way.push_back(i);
        ways.push_back(way);   
        return;
    }
    st[u] = 2; 
    dfs(u + 1);//左边分支,不选
    st[u] = 0; //恢复现场
    
    st[u] = 1;
    dfs(u + 1);//右边分支,选
    st[u] = 0;
}

int main() {
    scanf("%d", &n);
    dfs(1);
    for(int i = 0; i < ways.size(); i++) {
        for(int j = 0; j < ways[i].size(); j++)
            printf("%d ", ways[i][j]);
        puts("");
    }
    return 0;
}

4.真题

5.注意

今年一定不白给

posted @ 2021-01-31 00:06  Jerry_京  阅读(36)  评论(0)    收藏  举报